继续跑步:
package app;
import javafx.application.Application;
import javafx.stage.Stage;
public class Test extends Application {
static {
throwAnException();
}
@Override
public void start(Stage primaryStage) throws Exception {
}
public static void main(String[] args) {
launch(args);
}
private static void throwAnException() {
throw new RuntimeException();
}
}
停止:
package app;
import javafx.application.Application;
import javafx.stage.Stage;
public class Test extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
}
public static void main(String[] args) {
throwAnException();
launch(args);
}
private static void throwAnException() {
throw new RuntimeException();
}
}
为什么?
在第一种情况下,程序保持运行,即使有例外。 在第二种情况下,程序在调用javafx线程之前停止。 静态初始化程序应该在main方法之前运行,对吗? 我的英语不一样,所以我写的不多。 我希望你理解我的问题。
答案 0 :(得分:0)
这是一个便宜的答案
它继续运行,因为有4(3)个其他线程正在运行..
当你通过stop()
退出/关闭/关闭你的应用程序时,你会以正确的方式杀死你的应用程序,我认为main Thread
是在stop()
方法之后触发的,所以如果你有例外情况,它几乎发生在show之后,如果你在init()
方法中抛出异常,应用程序关闭真实 - init()
方法启动另外两个线程..
替换它并查看
static {
new Thread(new Runnable() {
@Override
public void run() {
while(true){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("There are "+ Thread.activeCount()+" still running");
}
}
}).start();
throwAnException();
}