<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
    主站蜘蛛池模板: 久久免费国产精品| 午夜亚洲www湿好大| 3d成人免费动漫在线观看| 国产精品久久亚洲一区二区| 亚洲无圣光一区二区| 亚洲一区二区三区影院 | 国产精品亚洲综合专区片高清久久久| 99久久国产热无码精品免费| 国产麻豆一精品一AV一免费 | 亚洲国产黄在线观看| 精品国产免费一区二区| 可以免费看黄视频的网站| 四虎影视成人永久免费观看视频| 国产成人精品免费视频大全| 亚洲精品精华液一区二区| 亚洲综合校园春色| 亚洲国产综合精品| 亚洲国产美国国产综合一区二区| 亚洲日韩国产精品第一页一区| 日韩亚洲精品福利| 波多野结衣视频在线免费观看 | 亚洲an日韩专区在线| 亚洲黄色三级网站| 婷婷久久久亚洲欧洲日产国码AV | 中文字幕免费在线看线人动作大片| 苍井空亚洲精品AA片在线播放| 精品亚洲456在线播放| 亚洲精品美女网站| 亚洲va久久久久| 亚洲性色精品一区二区在线| 亚洲 欧洲 日韩 综合在线| 四虎必出精品亚洲高清| 亚洲色大成网站WWW国产| 中文字幕亚洲综合久久综合| 亚洲夂夂婷婷色拍WW47| 亚洲爆乳无码专区www| 国产亚洲人成在线影院| 一级视频在线免费观看| 丝袜足液精子免费视频| 好紧我太爽了视频免费国产| 久久国产精品成人片免费|