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.                  
}

如果用户输入了一个未找到的数据库,则不应执行该程序。

当我输入错误的数据库名称时,if语句下面的代码不会执行,所以我到达了 main 方法的末尾,但程序没有终止,但是如果我system.exit(1)if语句之后添加,程序就会终止。为什么我需要打电话,System.exit(1)虽然我已经到了 main 的末尾?

4

4 回答 4

6

您正在显示一个 Swing 对话框,它启动了事件调度线程。这是一个非守护线程,因此会阻止程序退出。

对于一个普通的 Swing 应用程序,这正是您想要的:所有main()应该做的就是收集任何配置信息并创建主框架。

您的问题的一种解决方案是将对话代码包装在对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 回答