我在U盘上有一个Java应用程序和JRE ( Windows、Mac和Linux各一个),这样即使没有安装Java,它也可以在任何系统上运行。我运行了一个线程来检测U盘是否被移除,如果被移除,它将退出应用程序。
我想让它在退出之前显示一条消息(或者告诉他们重新插入驱动器),但是如果我试图显示JOptionPane,我得到的是NoClassDefFoundError,因为它已经和USB一起被移除了。
有没有一种方法可以将所需的类保留在内存中,这样Java就不会试图从不再存在的文件系统中加载它们?
谢谢!
发布于 2012-02-10 00:23:53
对于大多数运行时,加载的任何类都将位于内存中的PermGen部分。
在我看来,可能发生的情况是,显示错误需要以前没有加载过的类-这些类只在不再存在的驱动器上可用。
您可以通过在程序启动时触发错误显示逻辑来解决此问题,除非在不可见的模式下显示它。这应该使用相同的代码路径,以便加载所有必需的类,并确保它们在需要显示错误时是已知的。如果这太困难了,您可以手动调用Class.forName("javax.swing.JOptionPane") (对于每个所需的类),尽管这会更加脆弱,如果您在没有更新要加载的硬编码类的情况下更改渲染代码,则可能会崩溃。
如果情况并非如此(即所有必需的类都已加载,但仍然存在问题),那么您的运行时显然是在卸载类。您必须查看它的文档才能了解它在这里做了什么,以及如何阻止它。
https://stackoverflow.com/questions/9214643
复制相似问题