Java 并行无限循环

Java 并行无限循环,java,multithreading,Java,Multithreading,我第一次在Java中使用线程。让我知道是什么导致了无限循环,以及如何解决它。我认为这个问题是因为我在使用线程的同时使用了GUI 出现的情况是,会弹出无限多个GUI副本 public static void main(String[] args) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new RollplayGUI(); }

我第一次在Java中使用线程。让我知道是什么导致了无限循环,以及如何解决它。我认为这个问题是因为我在使用线程的同时使用了GUI

出现的情况是,会弹出无限多个GUI副本

public static void main(String[] args) {
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
                new RollplayGUI();
        }
    });
}

public RollplayGUI() {
    createGUI();
    RollplayGUI rg = new RollplayGUI();
    Thread trg = new Thread(rg);
    trg.setDaemon(true);
    trg.run();
}

public void run() {
        //Some fun stuff my daemon thread is supposed to do 
    }

我这样做的原因是run()方法执行一些网络代码,这些代码会阻塞,直到它从另一个程序获得连接。

您的代码失败,因为RollplayGUI构造函数正在实例化一个新的RollplayGUI对象。这将导致一个无限循环,并可能导致。。。堆栈溢出。

这是一个无限循环,因为您的回滚GUI()创建了一个新的回滚GUI()。删除此行:

RollplayGUI rg = new RollplayGUI();

贾斯汀说了什么,但一旦修复,你就永远不会开始你的线程。您只需创建一个Thread对象(它将在线程启动时表示线程),然后在原始线程中执行其run()方法。使用trg.start()而不是trg.run()来实际启动线程。

当您创建第一个
RollplayGUI
时,将调用构造函数。在该构造函数中,您创建了一个新的
RollplayGUI
,其构造函数将再次调用
RollplayGUI
。这将无限期地发生,这就是无限循环

电话是

RollplayGUI rg = new RollplayGUI();

获得无限多gui的一个原因是,每个RollplayGUI在实例化后立即创建一个新的RollplayGUI


此外,您应该对Thread对象调用start(),而不是run。如果您调用run,那么就好像您没有执行线程。开始()正确地处理线程。

当有人第一个问我关于。。。那么,下面的评论有帮助吗?你应该提供一些反馈,告诉他们你这方面的结果如何,以及你是否找到了解决方案。