【问题标题】:Java swing timer problemsJava摇摆定时器问题
【发布时间】:2012-04-20 12:29:06
【问题描述】:

(我认为)摆动计时器有问题。我编写了一些运行良好的代码,然后将其全部转移到我的新计算机上,但它立即无法运行。我用这个方法写了一个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 类,它只运行启动动画。它使用摆动计时器来做到这一点。在 splash 类中,监听器通过以下代码调整我的框架的内容:

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 循环而不做任何事情,但我不能按照目前的行为方式这样做。任何帮助表示赞赏。

【问题讨论】:

标签: java swing timer


【解决方案1】:

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

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

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

如果需要更具体的建议,可以,发sscce

【讨论】:

  • 啊,当我遇到这个问题时,我想我已经超越了我的 Java 知识。我仍然不太了解一些线程概念,所以我将阅读更多内容——感谢您的提示。
猜你喜欢
  • 2012-11-20
  • 2013-01-29
  • 1970-01-01
  • 1970-01-01
  • 2013-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-30
相关资源
最近更新 更多