我试图让一个线程运行我的GUI类,但是每次运行run方法时,它都会完全忽略我正在进行的while(true)循环,最终什么都不执行,奇怪的是,如果我添加其他内容诸如System.out.println之类的方法将运行该线程。
//GUI is a class I made which implements Runnable
GUI gui = new GUI();
Thread thread = new Thread(gui);
thread.start();
//Doesn't work, will just ignore the while loop
@Override
public void run() {
while(true){
//Launches JavaFx application
launch();
}
}
//If I change it to this or run the program in a debugger it does work
@Override
public void run() {
while(running){
System.out.println("Blah blah blah");
launch();
}
}
答案 0 :(得分:0)
我在本地计算机上测试了以下代码段:它一次又一次写出“启动” ...
我猜你的问题在别的地方...
public class Snippet {
public static void main(String[] args) {
GUI gui = new GUI();
Thread thread = new Thread(gui);
thread.start();
}
}
//GUI is a class I made which implements Runnable
class GUI implements Runnable {
@Override
public void run() {
while (true) {
// Launches JavaFx application
launch();
}
}
private void launch() {
System.out.println("Launched!");
}
}
也许尝试提供更多代码?
答案 1 :(得分:0)
首先,我不知道为什么您的launch()像@Thomas那样处于循环状态。但是,我只能说System.out.println实际上将文本输出到标准系统输出(通常是控制台),并且在与内存操作进行比较时非常耗时,因为它就像正在操作的“文件流”
这仅意味着当您的“运行”方法花费一些“相当长的时间”执行时,您的UI似乎启动了。我不认为在编写时JVM不会调用launch()方法,但是以某种方式需要UI才能启动“ System.out.println”引入的“延迟”。
除此以外,我不知道如何可视化UI代码中发生的事情!祝你好运!
edit:顺便说一句,当您说“ debugger”时,您可以通过控制“线程调度”在Debugger中扮演“ god”,但在运行时中,“ JVM”是执行此操作的“ god”。甚至很重要。