程序可以在调试器中运行,但不能在运行时运行

时间:2019-06-28 12:20:55

标签: java multithreading

我试图让一个线程运行我的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();
            }
        }

2 个答案:

答案 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”。甚至很重要。