<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屬性在代碼中設置不生效問題

    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代碼 復制代碼
    1. System.setProperty("java.library.path""./lib");  

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

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

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

    原因和ClassLoader的實現(xiàn)有關系,
    ClassLoader.loadLibrary() method:
    Java代碼 復制代碼
    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代碼 復制代碼
    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代碼 復制代碼
    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)強關聯(lián),只要jvm實現(xiàn)不是用的變量usr_paths來保存java.library.path的值,這個方法就不能用了。
    但是只要知道源代碼,小小的改動就應該可以實現(xiàn)了。

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

    導航

    統(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
    主站蜘蛛池模板: 免费国产黄网站在线观看| 羞羞网站免费观看| 免费黄色网址网站| 亚洲国产精品久久66| 亚洲精品免费在线观看| 日本久久久久亚洲中字幕| 1000部啪啪未满十八勿入免费| 久久久久久亚洲精品中文字幕 | 亚洲欧洲日韩不卡| 最近中文字幕mv免费高清在线 | 亚洲中文字幕日产乱码高清app| 五月婷婷免费视频| 国产aⅴ无码专区亚洲av麻豆| 美女无遮挡拍拍拍免费视频| 亚洲高清国产AV拍精品青青草原| 男人进去女人爽免费视频国产| 久久青青草原亚洲av无码app| 日韩免费一区二区三区在线| 亚洲精品宾馆在线精品酒店| 亚洲乱码日产精品a级毛片久久| 国产成人无码区免费内射一片色欲| 亚洲国产精久久久久久久| 黄+色+性+人免费| 国产亚洲综合久久| 精品国产综合成人亚洲区| 亚洲视频在线观看免费视频| 亚洲精品国产首次亮相| 国产成人精品亚洲精品| 59pao成国产成视频永久免费| 亚洲欧洲另类春色校园网站| 免费一级毛片在线播放| 午夜视频免费在线观看| 亚洲精品无码久久久久久| 亚洲日韩精品无码专区网址 | 国产精品久久香蕉免费播放| a级毛片免费高清视频| 亚洲精品一区二区三区四区乱码 | 欧洲黑大粗无码免费| 一级看片免费视频囗交| 亚洲精品偷拍无码不卡av| 青青青国产色视频在线观看国产亚洲欧洲国产综合 |