2012-02-09 39 views
3

我在JRE上安裝了一個Java應用程序(每個Windows,Mac OSX和Linux都有一個),這樣即使沒有安裝Java,它也可以在任何系統上運行。我有一個線程正在運行,以檢測USB存儲棒是否被移除,以及它是否退出應用程序。如何在Java運行時位於可移動驅動器上時防止NoClassDefFoundError?

我想讓它在退出之前顯示一條消息(或者告訴它們重新插入驅動器),但是如果我試圖顯示一個JOptionPane,我得到NoClassDefFoundError,因爲JRE已經與USB一起被刪除。

有沒有一種方法,以保持所需的類在內存中,以便Java不嘗試從不再存在的文件系統加載它們?

謝謝!

回答

3

對於大多數運行時,所加載任何類將在RAM中,在Java的內存PermGen的部分。

在我看來,什麼是有可能發生的是,顯示錯誤要求之前尚未加載的類 - 這是唯一可用的不再存在的驅動器上。

當程序啓動時,除了在它的無形顯示的模式有它你也許可以通過觸發你的錯誤顯示的邏輯來解決這個問題。這應該執行相同的代碼路徑,以便加載所有必需的類,並確保在需要顯示錯誤時已知它們。如果這太困難了,您可以手動調用Class.forName("javax.swing.JOptionPane")(對於每個需要的類),但如果更改渲染代碼而不更新要加載的硬編碼類,則這會更脆弱並且可能會中斷。

如果這個不是的情況下(即所有必需的類已經被加載,你仍然有問題),那麼你的運行時顯然是卸載類。你必須看看它的文檔,看看它在做什麼,以及如何阻止它。

相關問題