0

我(我认为)摆动计时器有问题。我编写了一些运行良好的代码,然后将其全部转移到我的新计算机上,但它立即无法运行。我用这个方法写了一个 GUI 类(基于 JFrame):

public void Splash(){
    mainPanel.add(Empous.splash, BorderLayout.CENTER);
    while(Empous.splash.GetCount() < 3){
              //System.out.println(Empous.splash.GetCount());
    }
}

该方法是从另一个类调用的。那个 Empous.splash 家伙是一个 JPanel 类,它只运行启动动画。它使用摆动计时器来做到这一点。在启动类中,侦听器通过以下代码调整我的框架的内容:

private class TimerListener implements ActionListener{
    public void actionPerformed(ActionEvent evt) {
        counter+=1;
        if (counter==1){
            title2.setText("In Association With");
            title1.setText("El Pollo Diablo Productions");
        }
        if (counter==2){
            remove(title2);
            remove(title1);
            repaint();
        }
        if (counter==3){
            timer.stop();
        }
    }
}

现在,如果第一个块中的打印语句被注释掉,我的程序将在计时器停止后冻结。如果我取消注释,程序将打印出计数器的值,然后继续下雨。我想取出 print 语句并让 while 循环运行而不做任何事情,但我不能按照目前的行为方式这样做。任何帮助表示赞赏。

4

1 回答 1

4

你看起来用这个 while 循环打破了 Swing 的线程规则:

while(Empous.splash.GetCount() < 3){
   //System.out.println(Empous.splash.GetCount());
}

既然你已经有一个 Swing Timer 可以处理这类事情而不释放事件线程,为什么还要有这个?

不过,对于更具体的建议,是的,请发布sscce

于 2012-04-07T03:28:56.297 回答