等待框架创建

时间:2015-02-15 20:43:49

标签: java swing animation

我在java中遇到问题,我不认识他,我解决了。 我创建了一个简单的程序,使用JPanelfor函数插入到文本sleep中。

像这样(这是一个例子):

public class example{
  JFrame frame....
  ..
  ..
   public example(){
      //ini frame and label.. then..
      String s = "abcqweewqewqewqewqweqwqeweqweqwq";

      //DO ANIMATION
      try
         {
         for(int i = 0;i<s.length();i++)
         {
         JLABEL.append(String.valueOf(s.charAt(i)));
           Thread.sleep(10);
         }
      }catch(Exception ex){}
   }
  public static void main.......{
     new example();
  }
}

它完美地工作(在一定时间间隔后写字符) ,如果我使用其他类调用此主 - 所以等到所有渲染然后窗口出现(所以不动画)。

哪里有问题?我希望,你了解我。

1 个答案:

答案 0 :(得分:3)

Swing是单线程的,正确编写的swing代码在event dispatch thread中运行。您的示例通过在EDT外部创建GUI来中断线程规则,并且还在主线程中运行循环。通常,在EDT中正确创建时,或者作为对按钮点击或类似事件的响应,循环会阻止事件调度线程,以便在循环完成之前不会发生绘图。 / p>

如果在事件派发线程中初始化GUI,则会出现这种情况:

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            new example()
        }
    });
}

正确的方式是使用Swing Timer

而不是在EDT中睡觉

总结一下:你的代码似乎只是因为它有错误,它运行事件派发线程之外的一些UI代码。