我创建了一个简单的swing程序,在其中创建了一个jframe,当我们关闭jframe时它关闭但cmd上没有提示,所以我们使用ctrl+c终止程序。但是当我使用javaw运行程序时& 关闭 jframe 提示出现在 cmd 上,不使用 ctrl+c。但我想知道它是如何运作的。
5 回答
该
javaw
命令与 java 相同,只是javaw
没有关联的控制台窗口。javaw
当您不想显示命令提示符窗口时使用。如果javaw
启动失败,启动器会显示一个带有错误信息的窗口。
尝试为 JFrame示例设置适当的关闭选项:
// Create a frame
JFrame frame = new JFrame();
// Get default close operation
int op = frame.getDefaultCloseOperation(); // HIDE_ON_CLOSE
// Set to exit on close
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
你也可以用你自己的函数覆盖 WindowListener 调用关闭操作,然后是 System.exit(0)
javaw.exe 专门用于 Windows 平台(w 代表 Windows)。如果我们使用 java.exe 启动 java 应用程序,则会有与之关联的控制台窗口 - 如果您关闭控制台应用程序也会关闭。javaw.exe 是 JVM 启动器,无需控制台即可在后台运行。
当您在 java 应用程序中关闭 jFrame 时,它不会退出应用程序 - 您应该捕获应用程序主窗口 (jFrame) 的窗口关闭事件并在需要清理后退出应用程序 - 此行为在 java.exe 和 javaw 中是相同的。可执行程序。当您使用 java.exe 启动应用程序时,控制台会显示应用程序状态,即使您关闭 jframe,您也可以确定该应用程序没有退出。在 javaw.exe 的情况下,没有控制台 - 如果关闭 GUI 应用程序的所有窗口,可能会误认为应用程序已退出 - 而应用程序在后台作为 javaw.exe 进程运行。为了通知用户(开发人员),在 javaw.exe 的情况下会有提示
它特定于 Windows。Windows 上有两种类型的应用程序:控制台和非控制台。javaw
是非控制台版本,java
这就是您看不到控制台出现的原因。如果您的应用程序是图形应用程序,那么您应该使用javaw
.
用 javaw 启动程序不会显示 java 控制台,而用 java 启动会显示 java 控制台。
但是,我建议您的程序应该很好地处理应用程序退出:
// option 1
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// option 2
frame.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
// do something here and then
System.exit(0);
}
});