我在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()方法执行一些阻塞的网络代码,直到它从另一个程序获得连接。
答案 0 :(得分:7)
您的代码失败,因为RollplayGUI构造函数正在实例化一个新的RollplayGUI对象。这将导致无限循环并且可能是...堆栈溢出。
答案 1 :(得分:2)
获得无数gui的一个原因是你让每个RollplayGUI在实例化后立即创建一个新的RollplayGUI。
另外,你应该在Thread对象上调用start(),而不是运行。如果你调用run,那就好像你没有进行线程化。 start()正确处理线程。
答案 2 :(得分:0)
这是一个无限循环,因为你有RollbackGUI()创建一个新的RollbackGUI()。删除这一行:
RollplayGUI rg = new RollplayGUI();
答案 3 :(得分:0)
贾斯汀所说的,但一旦解决了这个问题,你就永远不会开始。您只是创建一个Thread对象(它将在何时启动时表示该线程),然后在原始线程中执行其run()方法。使用trg.start()而不是trg.run()来实际启动线程。
答案 4 :(得分:0)
当您创建第一个RollplayGUI
时,将调用构造函数。在该构造函数中,您创建一个新的RollplayGUI
,其构造函数将再次调用RollplayGUI
。这将无限期地发生,这是无限循环。
该行是
RollplayGUI rg = new RollplayGUI();