1

序文: これは私が行った最初の本格的なスイング プログラムです。

私は 1 つの JButton がプログラムを終了するはずのスイングプログラムを持っています。そのボタンが this.dispose(); をトリガーします。この JButton をクリックすると、ウィンドウ完全に消えますが、デバッガーを見ると、プログラム自体はまだ実行されています。

私の主な方法は次のものだけで構成されています。

public static void main (String[] args)
{
  java.awt.EventQueue.invokeLater(new Runnable()
  {
    public void run()
    {
      new StartupGui().setVisible(true);
    }
  });
}

私の終了ボタンはアクションボタンのように見えます:

private void exitButtonActionPerformed(java.awt.event.ActionEvent evt)
{
  this.dispose();
}

終了ボタンについてもこれを試しました:

private void exitButtonActionPerformed(java.awt.event.ActionEvent evt)
{
  java.awt.EventQueue.invokeLater(new Runnable()
  {
    public void run()
    {
      dispose();
    }
  });
}

終了ボタンを押した後にデバッガーを見ると、次のように表示されます (以下のみ)。

Daemon Thread [AWT-XAWT] (running)
Thread [AWT-Shutdown] (running)
Thread [AWT-EventQueue-0] (running)
Thread [DestroyJavaVM] (running)

この時点でプログラムがシャットダウンしない理由について、誰かが私を正しい方向に向けることができますか? 私はいくつかのグーグルを行いましたが、これまでのところどこにも行きませんでした。さらに情報が必要な場合は、お知らせください

ありがとう :)

4

2 に答える 2

6

dispose()メソッドはリソースのみを解放するためです。

ドキュメントには

注: Java 仮想マシン (VM) 内の最後の表示可能ウィンドウが破棄されると、VM終了する場合があります。詳細については 、 AWT スレッドの問題を参照してください。

5月に気づきました

上記のリンクは、自動シャットダウン機能に関する詳細情報を提供します。this.dispose()あなたはそれについてもっと読むことができます.System.exit(0)

于 2010-06-25T00:28:32.263 に答える
0

この Pushing Pixels の記事: AWT のシャットダウンとデーモン スレッドでは、1.4 で変更された AWT のシャットダウン動作について説明しています。それでも、この記事では、完全にシャットダウンするのは難しい場合があると述べています。

残りのコードを見ることなく、私はポインタを提供することしかできません:

  • 破棄されていない非表示のフレームが他にないことを確認します
  • AWT キューでメッセージが生成されていないことを確認します (つまり、EventQueue にブレークポイントを設定します)。
  • それ以外の場合は、これらのスレッドのスタック フレームを見て、それらが何をしているかを確認します。
于 2010-06-25T00:23:04.160 に答える