Swing 调用具有Thread.sleep的方法时如何避免使EDT睡眠

Swing 调用具有Thread.sleep的方法时如何避免使EDT睡眠,swing,thread-safety,jlabel,thread-sleep,Swing,Thread Safety,Jlabel,Thread Sleep,所以,我试图让一个JLabel的文本看起来像是在打字。我的问题是,我不知道如何确保EDT不睡眠,GUI仍在更新。这里是代码 startGameText()从程序中的其他地方调用。(问题是一个JLabel。) 这是我希望它调用以更新标签问题的方法 public void typeOutQuestions(String s) throws InterruptedException{ for(int i = 0; i <= s.length(); i ++){ int

所以,我试图让一个JLabel的文本看起来像是在打字。我的问题是,我不知道如何确保EDT不睡眠,GUI仍在更新。这里是代码

startGameText()从程序中的其他地方调用。(问题是一个JLabel。)

这是我希望它调用以更新标签问题的方法

public void typeOutQuestions(String s) throws InterruptedException{

    for(int i = 0; i <= s.length(); i ++){

        int p = 0;
        w.questions.setHorizontalAlignment(SwingConstants.CENTER);

        w.questions.setText(s.substring(p, i));
        p--;
        Thread.sleep(100);

    }

}
public void typeOutQuestions(字符串s)抛出InterruptedException{

对于(int i=0;我请将您发布的代码制作成一个可供我们轻松修改的代码。请尝试,这可能会给您一些想法,如何进行此操作:-)。如果有什么不清楚的地方,随时可以问。我也很乐意帮你。当我听到你的问题时,我正要睡觉,所以做了一个快速的代码示例,不过如果你想做一些小的更改,请告诉我或者自己试试:-)@Garrett:True,尽管
javax.swing.Timer
用于像这样的短任务,但是如果你需要的话执行有点大,那么默认情况下,使用任务是在EDT上执行的/或者其他线程(在这里,在EDT上执行GUI相关任务将成为程序员的责任),为此目的。对于其余的任务,欢迎您继续微笑:-)
public void typeOutQuestions(String s) throws InterruptedException{

    for(int i = 0; i <= s.length(); i ++){

        int p = 0;
        w.questions.setHorizontalAlignment(SwingConstants.CENTER);

        w.questions.setText(s.substring(p, i));
        p--;
        Thread.sleep(100);

    }

}