Java Swing:我需要两个线程吗?

时间:2014-11-15 04:35:44

标签: java multithreading swing

我有这个方法来更新TextArea的值:

private void startShow(String fileName, TextArea textArea) throws InterruptedException{
        textArea.setVisible(true);
        int ptr=0;
        String[] tokens=s.split(" ");
        while (ptr<tokens.length){
            try {
                 Thread.sleep(1000+textSpeed*50);          //1000 milliseconds is one second
            } catch(InterruptedException ex) {
                  Thread.currentThread().interrupt();
            }
            textArea.setText(tokens[ptr]);
            ptr++;
        }
    }

这里,textSpeed是一个类变量,可以通过单击这样的按钮来更新:

Button button_1 = new Button("+");
button_1.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        textSpeed++;
    }
});

虽然我的代码在while循环中,但按钮是不可点击的,因此textSpeed无法更改。我的问题是:

1)我可以在没有多线程的情况下点击按钮吗?我刚刚开始使用Java Swing,我以前没有多线程经验,所以我不知道是否有更简单的解决方案。

2)如果需要多线程,我将如何在上面的代码中实现?任何提示或建议都会很棒。谢谢!

1 个答案:

答案 0 :(得分:2)

关于你的问题:

  

1)我可以在没有多线程的情况下点击按钮吗?我刚刚开始使用Java Swing,我以前没有多线程经验,所以我不知道是否有更简单的解决方案。

直接答案是否定的,您必须使用某种形式的多线程,您可以使用Swing Timer来执行延迟间接为了你。有关详细信息,请查看教程。对于您的程序,您可能会使用actualSpeed来设置Timer对象的延迟时间。

  

2)如果需要多线程,我将如何在上面的代码中实现?任何提示或建议都会很棒。谢谢!

这个问题有点宽泛,可能过于宽泛,在这种情况下,我发现最好的答案是让你阅读教程。对于Swing Threading,请检查Concurrency in Swing。然后在消化了这些信息之后,如果您有更具体的问题,那么通过特定的答案将更容易回答。