我正在处理这个需要加载本机库的应用程序。启动加载本机库的类的加载正在与主线程不同的线程上运行。 当发生错误(抛出错误)时,我会期望vm终止,但在这种情况下它不会。当然,当我无法加载本机库时,我不能继续,因为那是应用程序的核心。 我假设我的应用程序没有终止,因为主线程启动至少3个线程。连接线程 - 如果已连接小工具则侦听,然后通知侦听器已连接或断开连接,以及其他资源管理线程。
当jls说应用程序不应该尝试捕获错误时,我将如何结束我的应用程序?
答案 0 :(得分:1)
为了正确回答您的问题,我需要了解有关您生成的其他主题的更多信息。它们可以设置为守护程序类型的线程吗?如果没有,你通常如何优雅地退出这些线程?
这是一种强力方式(在加载本机库的线程内):
try {
methodToLoadLibrary();
doWhatYouNeedToDo();
} finally {
System.exit(1);
}
但是这假设您将在此线程终止时退出整个过程。
如果你有一个方法可以调用以使线程正常终止,你可以用这个替换System.exit(1);
调用:
Collection<Stoppable> sList;
for(Stoppable s : sList) {
s.stop();
}
其中Stoppable
是用于通信的接口,您希望在这些线程上正常关闭。
还有一些不那么干净的方法,比如在其他线程上调用Thread.stop
。