<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    gembin

    OSGi, Eclipse Equinox, ECF, Virgo, Gemini, Apache Felix, Karaf, Aires, Camel, Eclipse RCP

    HBase, Hadoop, ZooKeeper, Cassandra

    Flex4, AS3, Swiz framework, GraniteDS, BlazeDS etc.

    There is nothing that software can't fix. Unfortunately, there is also nothing that software can't completely fuck up. That gap is called talent.

    About Me

     

    java.library.path屬性在代碼中設(shè)置不生效問題

    from http://daimojingdeyu.blogbus.com/logs/28617218.html



    可是在使用上面文章介紹的動態(tài)庫時,遇上了加載問題,也就是將動態(tài)庫放到什么位置合適?文章中說可以放到System32目錄,但我不想這樣做,我更希望的是可以自己定制dll庫的位置~~

    沒有將lib放到System32目錄,而是放到了自己的lib目錄,程序在啟動的過程中會報下面的錯誤:
    java.lang.UnsatisfiedLinkError: no JIntellitype in java.library.path

    根據(jù)上面的提示信息在VM參數(shù)處通過-Djava.library.path將加載路徑指定到自己的lib目錄后,程序可以正常啟動。

    這種方式不是太好,因為要手動的去指定虛擬機參數(shù),于是想通過System類的setProperty函數(shù)來在代碼中動態(tài)的改變一下java.library.path的值。
    使用
    Java代碼 復(fù)制代碼
    1. System.setProperty("java.library.path""./lib");  

    后,啟動程序總是報錯"no JIntellitype in java.library.path"

    想了半天沒有想明白,為什么代碼的設(shè)置就不起作用,而在虛擬機參數(shù)處指定就是好的?

    Google了半天才知道原因,這里整理一下,以方便以后查找。
    代碼中設(shè)置不起作用,主要是因為java.library.path只在jvm啟動時讀取一次,其他情況下的修改不會起作用的。可以參考下面的這個bug:
    http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4280189

    原因和ClassLoader的實現(xiàn)有關(guān)系,
    ClassLoader.loadLibrary() method:
    Java代碼 復(fù)制代碼
    1. if (sys_paths == null) {  
    2.         usr_paths = initializePath("java.library.path");  
    3.         sys_paths = initializePath("sun.boot.library.path");  
    4. }  


    系統(tǒng)緩存了java.library.path的值,并且一直都會是第一次加載時的值。有人提到了下面的修改方法,
    Java代碼 復(fù)制代碼
    1. if (sys_paths == null) {  
    2.        sys_paths = initializePath("sun.boot.library.path");  
    3. }  
    4. usr_paths = initializePath("java.library.path");  

    但是從2002年到現(xiàn)在Sun一直都沒有改,不知道出于什么原因考慮的。

    有問題,就會有人解決問題,antony_miguel在一篇文章中,使用java的反射機制,完成了對于ClassLoader類中的usr_paths變量的動態(tài)修改,
    Java代碼 復(fù)制代碼
    1. public static void addDir(String s) throws IOException {  
    2.     try {  
    3.         Field field = ClassLoader.class.getDeclaredField("usr_paths");  
    4.         field.setAccessible(true);  
    5.         String[] paths = (String[])field.get(null);  
    6.         for (int i = 0; i < paths.length; i++) {  
    7.             if (s.equals(paths[i])) {  
    8.                 return;  
    9.             }  
    10.         }  
    11.         String[] tmp = new String[paths.length+1];  
    12.         System.arraycopy(paths,0,tmp,0,paths.length);  
    13.         tmp[paths.length] = s;  
    14.         field.set(null,tmp);  
    15.     } catch (IllegalAccessException e) {  
    16.         throw new IOException("Failed to get permissions to set library path");  
    17.     } catch (NoSuchFieldException e) {  
    18.         throw new IOException("Failed to get field handle to set library path");  
    19.     }  
    20. }  

    文章也同時指出了這種實現(xiàn)的局限性,和jvm的實現(xiàn)強關(guān)聯(lián),只要jvm實現(xiàn)不是用的變量usr_paths來保存java.library.path的值,這個方法就不能用了。
    但是只要知道源代碼,小小的改動就應(yīng)該可以實現(xiàn)了。

    posted on 2008-10-29 14:49 gembin 閱讀(8041) 評論(0)  編輯  收藏 所屬分類: JavaSE

    導(dǎo)航

    統(tǒng)計

    常用鏈接

    留言簿(6)

    隨筆分類(440)

    隨筆檔案(378)

    文章檔案(6)

    新聞檔案(1)

    相冊

    收藏夾(9)

    Adobe

    Android

    AS3

    Blog-Links

    Build

    Design Pattern

    Eclipse

    Favorite Links

    Flickr

    Game Dev

    HBase

    Identity Management

    IT resources

    JEE

    Language

    OpenID

    OSGi

    SOA

    Version Control

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    free counters
    主站蜘蛛池模板: 97在线免费观看视频| xxxxwww免费| 亚洲日本一区二区三区| 国产免费不卡v片在线观看| 另类小说亚洲色图| 久久精品国产亚洲AV高清热| 暖暖日本免费在线视频| 国产一级a毛一级a看免费视频 | 在线观看亚洲免费| 亚洲av网址在线观看| 全免费A级毛片免费看网站| 成在人线av无码免费高潮喷水| 亚洲冬月枫中文字幕在线看| 国产黄色一级毛片亚洲黄片大全 | 亚洲中文字幕久久精品无码喷水| 在线看片v免费观看视频777| 久香草视频在线观看免费| 亚洲国产成人超福利久久精品| 亚洲偷自拍拍综合网| 最近最好的中文字幕2019免费| 你是我的城池营垒免费看 | 男男AV纯肉无码免费播放无码| 九九热久久免费视频| 亚洲AV无码国产精品永久一区| 亚洲国产精品无码久久久秋霞2| 暖暖在线日本免费中文| 4444www免费看| 国产成人无码区免费网站| 色网站在线免费观看| 亚洲影视自拍揄拍愉拍| 久久精品亚洲综合一品| 亚洲乱码中文字幕综合234| 成人免费在线观看网站| 亚洲第一网站免费视频| 久久国产乱子伦精品免费午夜| 亚洲av日韩av永久无码电影 | 精品乱子伦一区二区三区高清免费播放| 亚洲精品无码久久久久APP| 亚洲国产精品无码久久久| 亚洲a在线视频视频| 亚洲精品V欧洲精品V日韩精品|