4

32ビットWinXPおよびWin7)およびEclipse(インディゴ)で開発/テストしたアプリケーションがあります。「ファイル」->「エクスポート」->「実行可能Jar」を使用してアプリケーションをデプロイします(「必要なライブラリーを生成されたJARにパッケージ化」します)。そこから、実行可能ファイルにラップします。

私は最近、64ビットWin732ビットWinは正常に動作します)ではアプリケーションを閉じることができないことに気付きました(「右上のX」でもalt+でも)。私は64ビットWin7でアラウンドをプレイし始めましたが、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で書き込まれます。また、同じディレクトリに、そのファイルで例外が発生する直前に書き込まれる他のファイルがあります。それらは機能します(私はそれらをチェックしました)。唯一の違い:他のファイルには、他のファイルにはを使用し、このファイルにはを使用しnew OutputStreamWriter(new FileOutputStream(File file))ますnew DataOutputStream(new FileOutputStream(File file))

4

2 に答える 2

3

I can verify that system.exit(0) works on 64 bit systems. If I had to guess, My answer would be that you are not disconnecting and you're throwing your Interupted Exception.

My recomendations: Put a system.out.print statement in your catch statement to see if you are catching.. If you are, you know you're problem, if not, you're not disconnecting and sitting in the while loop.

edit: try

FileOutputStream fos = new FileOutputStream("t.tmp"); // t.tmp is the directory&file name
ObjectOutputStream oos = new ObjectOutputStream(fos);
于 2012-07-13T13:27:14.573 に答える
2

以下を使用して、例外に関係なく常にSystem.exit(0)を呼び出すようにすることができます。

public void closeApplication(){
        try{
            while (ConnectionManager.isConnected()){
                try{
                    ThreadManager.addMeasRequestPriority(eMeasRequest.DISCONNECT);
                    Thread.sleep(100);
                }
                catch (InterruptedException e){
                }
            }
            ConfigurationManager.saveToXML(new File("ressources/settings/startup.xml"));
        }
        finally{
            System.exit(0);
        }
    }

ただし、whileループで無限にループしている可能性もあります。

于 2012-07-13T13:33:16.723 に答える