2011-04-15 51 views
0

我在Windows XP操作系統上使用JDK 1.6。運行一個簡單的Java程序來打印java.ext.dirs系統屬性值:java.ext.dirs Java中的系統屬性

System.getProperty("java.ext.dirs") 

打印:

C:\ Program Files文件\的Java \ JRE6 \ LIB \分機; C:\ WINDOWS \太陽\的Java \ lib \ ext

在打印的兩個目錄中,第二個目錄不存在於我的系統上,即C:\WINDOWS\Sun\Java\lib\ext目錄在我的系統中不可用。

我不理解,爲什麼然後Java返回這個非法目錄值爲java.ext.dirs 屬性? 如何從java.ext.dirs屬性中消除此值?

+0

順便說一句 - 儘快轉移到Windows XP上方的系統......微軟不再爲這個老式操作系統提供安全補丁 – ErstwhileIII 2014-08-23 14:02:28

回答

2

我不明白,爲什麼Java爲java.ext.dirs屬性返回這個非法的目錄值?

它正在返回JVM看起來的位置。如果列表中有一個不存在的目錄,我希望它被默默地忽略。你在觀察不同的東西嗎?

如何從java.ext.dirs屬性中消除此值?

我讀的this page是你應該可以設置屬性。 (同一頁解釋如何使用路徑以及如何確定默認值。)

您可能需要通過命令行設置它;例如使用-Djava.ext.dirs=...。我希望在JVM啓動之後對屬性所做的更改不起作用。

+0

不,程序運行時沒有錯誤,但是當啓用安全管理器(-Djava.security.debug = all -Djavax.net.debug = all -Djava.security.manager)時,我可以看到消息和一個異常,'java.lang.IllegalArgumentException:null在sun.security.util.PolicyUtil.getKeyStore(未知源)的KeyStore名''我已經發布上​​面的堆棧跟蹤 – Vicky 2011-04-15 04:39:13

+0

我認爲這是你不需要的東西擔心,如果您擔心,只需創建丟失的目錄......不需要任何內容​​。 – 2011-04-15 05:01:25

2

這些是Java將尋找擴展名的目錄。如果其中一個目錄不存在,則不會在那裏找到任何擴展名 - 沒有什麼大不了的,爲什麼它很重要?

無論如何,如果您願意,可以在Java命令行上提供-Djava.ext.dirs=PATH

+0

其實我試圖通過啓用安全管理器來查看日誌消息我的Java程序。我的程序沒有中斷,但是在日誌消息中我可以看到下面的堆棧跟蹤: – Vicky 2011-04-15 04:36:24

+0

policy:reading file:/ C:/Program%20Files/Java/jre6/lib/security/java.policy \t [Policy Parser]:爲擴展的java.ext.dirs路徑創建策略條目: \t \t file:/ C:/ Program%20Files/Java/jre6/lib/ext/* \t [Policy Parser]:爲擴展的java.ext創建策略條目。迪爾斯路徑: \t \t文件:/ C:/ WINDOWS /太陽/ Java的/ lib/ext目錄/ * java.lang.IllegalArgumentException異常:無效的密鑰庫名稱 \t在sun.security.util.PolicyUtil.getKeyStore(來源不明) \t at sun.security.provider.Po licyFile.init(Unknown Source) \t at sun.security.provider.PolicyFile.access $ 400(Unknown Source) \t at sun.security.provider.PolicyFile $ 3。運行(Unknown Sou – Vicky 2011-04-15 04:36:53