<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è)置不生效問(wèn)題

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



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

    沒(méi)有將lib放到System32目錄,而是放到了自己的lib目錄,程序在啟動(dòng)的過(guò)程中會(huì)報(bào)下面的錯(cuò)誤:
    java.lang.UnsatisfiedLinkError: no JIntellitype in java.library.path

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

    這種方式不是太好,因?yàn)橐謩?dòng)的去指定虛擬機(jī)參數(shù),于是想通過(guò)System類(lèi)的setProperty函數(shù)來(lái)在代碼中動(dòng)態(tài)的改變一下java.library.path的值。
    使用
    Java代碼 復(fù)制代碼
    1. System.setProperty("java.library.path""./lib");  

    后,啟動(dòng)程序總是報(bào)錯(cuò)"no JIntellitype in java.library.path"

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

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

    原因和ClassLoader的實(shí)現(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的值,并且一直都會(huì)是第一次加載時(shí)的值。有人提到了下面的修改方法,
    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一直都沒(méi)有改,不知道出于什么原因考慮的。

    有問(wèn)題,就會(huì)有人解決問(wèn)題,antony_miguel在一篇文章中,使用java的反射機(jī)制,完成了對(duì)于ClassLoader類(lèi)中的usr_paths變量的動(dòng)態(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. }  

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

    posted on 2008-10-29 14:49 gembin 閱讀(8043) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): JavaSE

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿(6)

    隨筆分類(lèi)(440)

    隨筆檔案(378)

    文章檔案(6)

    新聞檔案(1)

    相冊(cè)

    收藏夾(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

    最新隨筆

    搜索

    積分與排名

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    free counters
    主站蜘蛛池模板: 亚洲男人第一无码aⅴ网站| 免费无毒a网站在线观看| 免费看美女被靠到爽的视频| 亚洲AV无码专区在线观看成人| 免费人妻av无码专区| 日本人的色道免费网站| 青青青亚洲精品国产| 中文字幕在线观看亚洲| mm1313亚洲精品国产| 一级女人18毛片免费| 18观看免费永久视频| 在线看片免费人成视频福利| 国产一区二区三区亚洲综合| 亚洲成a人不卡在线观看| 香蕉视频在线观看亚洲| 亚洲综合AV在线在线播放| 又色又污又黄无遮挡的免费视| 免费看大美女大黄大色| 国外成人免费高清激情视频 | 97免费人妻无码视频| 男女午夜24式免费视频| 中国极品美軳免费观看| 99在线视频免费观看| 99久久国产免费-99久久国产免费| 中文字幕av免费专区| 无码少妇精品一区二区免费动态 | 亚洲人成网站在线播放2019| 亚洲人成77777在线观看网| 亚洲熟妇AV一区二区三区浪潮 | 和日本免费不卡在线v| 在线精品免费视频| 久久夜色精品国产亚洲av| 国产亚洲美女精品久久久久狼 | 久久免费视频网站| 精品久久久久久久久免费影院| 午夜爱爱免费视频| 亚洲日韩欧洲无码av夜夜摸| 亚洲国产成人无码av在线播放| 在线亚洲v日韩v| 99在线观看视频免费| 亚洲精品99久久久久中文字幕|