为什么';主框架关闭时scala swing应用程序是否退出?

为什么';主框架关闭时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

在下面的最小Scala Swing应用程序中,如果我选择File->Exit(调用
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 }