我有一个程序,在我启动之前我要求用户输入。
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
,虽然我已经到了主要的结尾?
答案 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后终止(假设所有其他正在运行的线程都是守护进程)。