在javafx中,要实现界面显示,一般是要继承application这个超级父类,才能使用启动,
实际上来讲,application所实现也是一个线程,只是在线程上添加了调度和识别,javafx的控件以及事件必须要在javafx中进行,使用Thread是完全不行的,但是如果将fx线程进行调度,添加到thread中,就可以实现这个功能,
,实际上来讲,thread也是实现了一个线程,举个例子,在监听事件中,就不是开线程监听,而是在线程所处的堆栈中,监听,如果发生改变,就触发监听事件,
package test;
import javafx.application.Application;
import javafx.application.Platform;
public class threadTest1 {
public static void main(String[] args) {
//启动fx线程
Thread fxThread = new Thread(() -> {
try {
Application.launch(FXMLLauncher.class);
} catch (RuntimeException e) {
e.printStackTrace();
}
});
fxThread.setDaemon(true);
fxThread.start();
//主线程输出
System.out.println(Thread.currentThread().getName() + "say: hello World");
//主线程 休眠 1秒 确保fx线程启动成功
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
//第一次调用fx线程输出
Platform.runLater(() -> {
System.out.println(Thread.currentThread().getName() + "say: Hello javaFX1");
});
//第二次调用fx线程输出
Platform.runLater(() -> {
System.out.println(Thread.currentThread().getName() + "say: Hello javaFX2");
});
//主线程 休眠 1秒 确保线程运行结束
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
//中断fxThread程序退出
fxThread.interrupt();
// fxThread.stop();
}
}
Thread的停止线程有几个方法,stop()方法比较简单粗暴,直接中断线程,有时候该线程还持有某个对象的锁,此锁不能正常释放
interrupt()方法告诉线程该结束了,然后由线程决定什么时候终止