Java 程序不';t到达主方法末尾时终止

Java 程序不';t到达主方法末尾时终止,java,joptionpane,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()

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

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)
,尽管我已经到达main的末尾?

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

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


解决此问题的一个方法是将对话框代码包装在对的调用中。

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

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

您可以调用
.setDefaultCloseOperation(JFrame.EXIT\u ON\u CLOSE)以便JVM在关闭JFrame后终止(考虑到所有其他正在运行的线程都是守护进程)。

是。。我只是改变了它,它成功了。我错过了新的JFrame()
。。工作时间过长的影响似乎在后台运行线程,从而阻塞了应用程序。您是否在应用程序的其他位置运行线程?
JFrame jframe = new JFrame()
String answer = JOptionPane.showInputDialog(jframe, "Enter a DB:")
System.err.println(answer)
jframe.dispose()