<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
    主站蜘蛛池模板: 免费真实播放国产乱子伦| 成在人线av无码免费高潮水 | j8又粗又长又硬又爽免费视频| 美女视频黄a视频全免费| 97se亚洲综合在线| 亚洲精品无码mv在线观看网站| 少妇亚洲免费精品| 精品国产日韩亚洲一区| 国产精品永久免费| 亚洲国产精品福利片在线观看| 野花香在线视频免费观看大全 | 免费在线看污视频| 亚洲va中文字幕无码久久| 久久综合九色综合97免费下载 | 免费人成在线观看网站品爱网日本| 亚洲a无码综合a国产av中文| 免费在线观看日韩| 成人免费乱码大片A毛片| 久久久久亚洲Av片无码v | 未满十八18禁止免费无码网站| 午夜亚洲www湿好大| 国产乱子精品免费视观看片| 亚洲色最新高清av网站| 免费看男女下面日出水视频| 中文字幕无码免费久久9一区9| 亚洲av永久无码精品漫画| 免费观看的毛片大全| 亚洲高清乱码午夜电影网| 婷婷综合缴情亚洲狠狠尤物| a级毛片在线免费看| 亚洲人和日本人jizz| 免费夜色污私人影院在线观看| 在线观看黄片免费入口不卡| 亚洲精品成人久久| 永久久久免费浮力影院| 国产精品永久免费| 亚洲白嫩在线观看| 全部免费国产潢色一级| 最近2018中文字幕免费视频| 久久久久久久久无码精品亚洲日韩| 亚洲日本va中文字幕久久|