到达主方法结束时,程序不会终止

时间:2013-03-21 14:10:47

标签: java joptionpane

我有一个程序,在我启动之前我要求用户输入。

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方法的末尾,但程序没有终止,但如果我添加{{1在system.exit(1)语句之后,程序终止。为什么我需要拨打if,虽然我已经到了主要的结尾?

4 个答案:

答案 0 :(得分:5)

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

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

问题的一个解决方案是将对话框代码包装在SwingUtilities.invokeAndWait()的调用中。

答案 1 :(得分:3)

您创建了一个新的JFrame,默认情况下不会关闭,因为没有任何内容可以触发窗口处理,例如WindowEvent。由于这似乎是一个非基于UI的应用程序,您可以简单地使用:

JOptionPane.showInputDialog(null, "Enter a DB:");

答案 2 :(得分:2)

JFrame jframe = new JFrame()
String answer = JOptionPane.showInputDialog(jframe, "Enter a DB:")
System.err.println(answer)
jframe.dispose()

答案 3 :(得分:0)

您可以在JFrame上调用.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);,以便JVM在关闭JFrame后终止(假设所有其他正在运行的线程都是守护进程)。