2

起動する前にユーザーに入力を求めるプログラムがあります。

public static void main(String args[]) 
{
    String database = JOptionPane.showInputDialog(new JFrame(), "Enter a DB:");
    if(database!=null && database.foundInDB()) {
        SPVerification spv = new SPVerification();
        spv.setVisible(true);
    }
    //System.exit(1);  Without it the program doesn't terminate although it's the end
    //                 of the main function.                  
}

ユーザーが見つからないデータベースを入力した場合、プログラムは実行されません。

DB名を間違えると以下のif文が実行されず、mainメソッドの最後までたどり着くがプログラムが終了せず、文のsystem.exit(1)後ろに追記するとプログラムが終了してしまう。メインの終わりに達したのに、ifなぜ呼び出す必要があるのですか?System.exit(1)

4

4 に答える 4

6

イベントディスパッチスレッドを開始する Swing ダイアログを表示しています。これは非デーモン スレッドであるため、プログラムが終了できなくなります。

通常の Swing アプリケーションでは、まさにこれが必要です。main()構成情報を収集し、メイン フレームを作成するだけです。

問題の解決策の 1 つは、ダイアログ コードをSwingUtilities.invokeAndWait()の呼び出しでラップすることです。

于 2013-03-21T14:13:26.400 に答える
3

. _ JFrame_ WindowEventこれは非 UI ベースのアプリケーションのように見えるため、次のように簡単に使用できます。

JOptionPane.showInputDialog(null, "Enter a DB:");
于 2013-03-21T14:15:52.027 に答える
3
JFrame jframe = new JFrame()
String answer = JOptionPane.showInputDialog(jframe, "Enter a DB:")
System.err.println(answer)
jframe.dispose()
于 2013-03-21T14:22:43.087 に答える
0

.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);JFrame を閉じた後に JVM が終了するように、JFrame を呼び出すことができます(実行中の他のすべてのスレッドがデーモンであるという事実を考えると)。

于 2013-03-21T14:29:48.670 に答える