java – 当作为runnable jar启动时,应用程序不会在64位窗口上关闭

我有一个应用程序,我在32位Win(XP和Win7)和eclipse(indigo)下开发/测试.我使用File-> Export-> Runnable Jar(“将所需的包打包到生成的JAR中”)部署应用程序.从那里我把它包装成一个可执行文件.

我最近注意到我的应用程序无法在64位Win7(32位Win工作正常)中关闭(既不是“右上X”也不是alt F4).我开始在64位Win7中玩arround并发现,当从eclipse启动时,我可以关闭应用程序.我将它导出到一个可运行的jar后,我无法关闭它.我的应用程序的每个其他部分工作正常(也在64位Win7下).

我有一个像这样运行的关闭钩子:

// 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()).问题是当我没有在eclipse中运行它时我没有System.out,所以我看不出是否有任何异常或发生了什么.你知道我怎么能找到问题(或者已经知道问题)了吗?

可能的候选人

> 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.此外,同一目录中还有其他文件在该文件发生异常之前写入.他们工作(我只是检查了他们).唯一的区别是:对于其他文件,我为其他文件使用新的OutputStreamWriter(新的FileOutputStream(文件文件)),为此使用新的DataOutputStream(新的FileOutputStream(文件文件)).

最佳答案
我可以验证system.exit(0)是否适用于64位系统.如果我不得不猜测,我的答案是你没有断开连接而且你正在抛出你的Interupted Exception.

我的推荐:在你的catch语句中放入一个system.out.print语句,看看你是否正在捕捉..如果你是,你知道你有问题,如果没有,你就不会断开连接并坐在while循环中.

编辑:试试

FileOutputStream fos = new FileOutputStream("t.tmp"); // t.tmp is the directory&file name
ObjectOutputStream oos = new ObjectOutputStream(fos);

转载注明原文:java – 当作为runnable jar启动时,应用程序不会在64位窗口上关闭 - 代码日志