我有一个我在32 位 Win(XP和Win7)和 Eclipse(靛蓝)下开发/测试的应用程序。我使用 File->Export->Runnable Jar 部署应用程序(使用“将所需的库打包到生成的 JAR”中)。从那里我将它包装成一个可执行文件。
我最近注意到我的应用程序无法在64 位 Win7(32 位 Win工作正常)中关闭(无论是“右上角 X”还是alt+ )。我开始在64位Win7下玩arround ,发现从eclipse启动时,我可以关闭应用程序。将其导出到可运行的 jar 后,我无法关闭它。我的应用程序的所有其他部分都可以正常工作(也在64 位 Win7下)。F4
我有一个像这样运行的关闭挂钩:
// initialize JFrame frame;
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
closeApplication();
}
});
frame.setVisible(true);
public void closeApplication() {
while (ConnectionManager.isConnected())
try {
ThreadManager.addMeasRequestPriority(eMeasRequest.DISCONNECT);
Thread.sleep(100);
} catch (InterruptedException e) {}
ConfigurationManager.saveToXML(new File("ressources/settings/startup.xml"));
System.exit(0);
}
我注意到 GUI 正在断开连接,但仅此而已(但这意味着closeApplication()
已输入)。问题是System.out
当我不在eclipse中运行它时我没有,所以我看不到是否有任何异常或发生了什么。您知道我如何找到问题(或已经知道问题)吗?
可能的候选人:
- System.exit(0) 在64 位 下有不同的行为(为什么会这样,是否有替代方案?)
- 我无法创建/写入给定文件
startup.xml
(如何检查?) - 我的64 位 Win7笔记本电脑中的一个小矮人用他的铁锤短路了主板上的一些东西,从而阻止了应用程序关闭(我怎样才能删除他?)
- 其他
如果您能告诉我这里发生了什么或您将如何继续了解更多信息,我将不胜感激。
编辑:感谢您的快速回复。我发现,我得到以下异常:
java.io.FileNotFoundException: ressources\settings\startupPlot0.apph (Access denied)
at java.io.FileOutputStream.open(Native Method)
...
但这怎么可能呢?该文件肯定存在并以非 64 位 Win写入。此外,在该文件发生异常之前,同一目录中还有其他文件被写入。他们工作(我刚刚检查过他们)。唯一的区别:对于其他文件,我对其他文件使用 a new OutputStreamWriter(new FileOutputStream(File file))
,对这个文件使用 a new DataOutputStream(new FileOutputStream(File file))
。