为什么';主框架关闭时scala swing应用程序是否退出?
在下面的最小Scala Swing应用程序中,如果我选择File->Exit(调用为什么';主框架关闭时scala swing应用程序是否退出?,swing,scala,Swing,Scala,在下面的最小Scala Swing应用程序中,如果我选择File->Exit(调用sys.Exit)或File->Quit(调用SimpleSwingApplication.Quit),则应用程序退出。如果我选择File->Close(调用Frame.Close),那么窗口将关闭,但应用程序不会退出(例如,当使用java-jar myexample.jar运行时,它不会返回到提示符——我必须^C将其杀死) 我试过几种不同的方法,都有相同的行为: 使用大型机而不是框架 向与WindowClosi
sys.Exit
)或File->Quit(调用SimpleSwingApplication.Quit
),则应用程序退出。如果我选择File->Close(调用Frame.Close
),那么窗口将关闭,但应用程序不会退出(例如,当使用java-jar myexample.jar运行时,它不会返回到提示符——我必须^C将其杀死)
我试过几种不同的方法,都有相同的行为:
- 使用
大型机
而不是框架
- 向与
WindowClosing
匹配的reactions
添加一个处理程序,并从中调用sys.exit
- 向
框架
子类(此处未显示)和
- 到
SimpleSwingApplication
EXIT\u ON\u CLOSE
似乎应该这样做,但它是否存在并不重要
- 将默认关闭操作设置为
DISPOSE\u ON\u close
- 覆盖
Frame.closeOperation
以调用sys.exit
,但这似乎根本没有被调用(我在那里添加了一个打印,它不会产生任何输出)
受此启发,如果我将File->Close处理程序更改为调用dispose
而不是Close
,应用程序将退出。委员会:
关闭框架并在关闭时退出应用程序
这让我觉得close
应该有效
为什么我必须在这里调用dispose
而不是close
?为什么在关闭时不退出或覆盖close操作
工作?您正在调用的swing.Window
方法是:
def close() { peer setVisible false }
这显然不是你的假设。或者,你可以使用GUI.quit()
这个答案对我来说太简单了。你能为像我这样慢的人详细说明一下吗?Thx@MartinQuinson也就是说,close
方法不是大型机上的文档的意思。使用退出
或者在关机
调用框架中。释放
。我第一次学习scala时玩过scala swing,但我不使用它。我将把它作为2020年最烦人的否决票。
def close() { peer setVisible false }