我有这个方法来更新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)如果需要多线程,我将如何在上面的代码中实现?任何提示或建议都会很棒。谢谢!
答案 0 :(得分:2)
关于你的问题:
1)我可以在没有多线程的情况下点击按钮吗?我刚刚开始使用Java Swing,我以前没有多线程经验,所以我不知道是否有更简单的解决方案。
直接答案是否定的,您必须使用某种形式的多线程,但您可以使用Swing Timer来执行延迟间接为了你。有关详细信息,请查看教程。对于您的程序,您可能会使用actualSpeed
来设置Timer对象的延迟时间。
2)如果需要多线程,我将如何在上面的代码中实现?任何提示或建议都会很棒。谢谢!
这个问题有点宽泛,可能过于宽泛,在这种情况下,我发现最好的答案是让你阅读教程。对于Swing Threading,请检查Concurrency in Swing。然后在消化了这些信息之后,如果您有更具体的问题,那么通过特定的答案将更容易回答。