在System.exit(0)被称为-Java之后,应用程序继续运行
我试图在我的应用程序关闭之前清理它中的资源,根据我前面的问题()我已经实现了下面的代码,它完美地执行了清理操作在System.exit(0)被称为-Java之后,应用程序继续运行,java,events,netbeans,shutdown-hook,Java,Events,Netbeans,Shutdown Hook,我试图在我的应用程序关闭之前清理它中的资源,根据我前面的问题()我已经实现了下面的代码,它完美地执行了清理操作 //Intercept when the application closes Runtime.getRuntime().addShutdownHook(new Thread() { @Override public void run() {
//Intercept when the application closes
Runtime.getRuntime().addShutdownHook(new Thread()
{
@Override
public void run()
{
//Reclaim resources from MIDI usage
if(_midiInstance.CleanUp())
{
Logger.Add("Closed resources successfully on ShutDown");
}
else
{
Logger.Add("Failed to close all resources on ShutDown");
}
System.exit(0);
}
});
虽然系统退出(0);调用被理解和处理,应用程序继续运行,只是没有一个可访问的GUI。我曾经考虑过将System.exit(0)调用放在线程之外,但是它超出了范围,没有任何其他线程或流在运行
在连接到关机事件时,是否需要采取额外的步骤来确保一切都已关闭
谢谢您的时间,我非常感谢。在阅读了您的其他问题后,您可能没有访问您的窗口。如果是真的,这将解释问题的原因。在阅读了其他问题后,您可能没有打开窗口。如果为真,这将解释问题的原因。您需要超越windows关闭按钮:
//overriding the windowClosing() method will allow the user to click the close button
addWindowListener(
new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
通过这样做,程序将关闭,而不仅仅是变得不可见 您需要越过车窗关闭按钮:
//overriding the windowClosing() method will allow the user to click the close button
addWindowListener(
new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
通过这样做,程序将关闭,而不仅仅是变得不可见 应用程序中的所有线程是否正确处理被中断?应用程序中没有其他线程,只有挂接到关机事件时声明的线程。应用程序中的所有线程是否正确处理被中断?应用程序中没有其他线程,唯一的线程是挂接到关机事件时声明的线程。在调用System.exit(0)之前是否调用Dispose()?您可以调用它而不是调用System.exit(0)。应用程序将自然退出。@JVerstry我已经尝试过这个。dispose();但这是一个“找不到”的符号错误。我正在使用扩展FrameView的SwingUI应用程序,我使用向导创建项目,它为我提供了表单。不,您应该尝试类似于e.getWindow().dispose()的方法,其中e是windowClosing处理程序接收的WindowEvent。上面的代码示例显示我无法访问WindowsEvent,我是否应该使用@John Reasor的答案重新实现它并以这种方式执行?我是否应该在调用System.exit(0)之前调用Dispose()?您可以调用它而不是调用System.exit(0)。应用程序将自然退出。@JVerstry我已经尝试过这个。dispose();但这是一个“找不到”的符号错误。我正在使用扩展FrameView的SwingUI应用程序,我使用向导创建项目,它为我提供了表单。不,您应该尝试类似于e.getWindow().dispose()的方法,其中e是windowClosing处理程序接收的WindowEvent。上面的代码示例显示我无法访问WindowsEvent,我是否应该使用@johnreasor的答案重新实现它,并这样做?是的,但是如果在其他线程上执行工作,那么这是一种苛刻的方法。我同意dispose()是比System.exit(0)更好的选择;我确实指出了windowsClosingYes的覆盖,但如果在其他线程上执行工作,则这是一种苛刻的方法。我同意dispose()是比System.exit(0)更好的选择;我真的指出了窗口关闭的覆盖