每当方法的任务完成时,我都会尝试在JTextArea
中显示消息。我的方法需要一些时间。这是关于连接到网络或使用I / O,您已经知道这些任务需要时间。
为了使应用程序更加用户友好,我想在JTextArea
中显示消息。从昨天开始,我一直坚持这个问题。今天早上我问了一个关于这个的问题,并就如何实现我的目标提出了一些建议。看来SwingWorker
有助于在继续更新GUI的同时执行后台任务。
所以我尝试使用这个类,看过很多例子和Java文档,但我真的不知道如何在我的应用程序中实现它。为了帮助您理解,我做了以下示例:
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
class MyMethods {
// Let's suppose this task takes a long time.
public static String firstTask(){
return "\nfirst task work done.";
}
// Let's suppose this task takes a long time.
public static String secondTask(){
return "\nsecond task work done.";
}
}
class TaskCounter extends SwingWorker<Integer, Integer> {
public TaskCounter(){}
protected Integer doInBackground(){
MyMethods.firstTask();
MyMethods.secondTask();
return null;
}
protected void done(){
MyFrame.textArea.append(MyMethods.firstTask());
MyFrame.textArea.append(MyMethods.secondTask());
}
}
class MyFrame extends JFrame implements ActionListener {
static JPanel panel;
static JTextArea textArea;
static JButton startButton;
TaskCounter task = new TaskCounter();
public MyFrame(){
setSize(200,200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panel = new JPanel();
textArea = new JTextArea(20,20);
panel.setLayout(new GridLayout(2,2));
startButton = new JButton("START");
panel.add(textArea);
panel.add(startButton);
startButton.addActionListener(this);
add(panel);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
task.execute();
}
}
public class SwingWorkerTest {
public static void main(String args[]) {
MyFrame frame = new MyFrame();
}
}
我想要做的是显示消息,而不是一次显示消息。完成firstTask()
后,在"first work done"
完成后显示消息secondTask()
,然后稍后,显示消息"second work done"
。请假设firstTask()
和secondTask()
方法需要一些时间才能完成。
我认为应该将长时间运行的任务放入doInBackground()
方法中,并且应该将与更新GUI相关的方法放入done()
方法中。
我该如何解决这个问题?
感谢您的阅读,并抱歉尴尬的表达。
答案 0 :(得分:0)
你的后台线程应该调用方法
String message="hi im processx";
SwingWorker.publish(message);
你必须采用ovveride方法
SwingWokrer.process().
这个方法是在EDT上调用的,当它与之前传递的消息一起被释放(可能是一个或多个)时。
您应该在那里显示您的进度
中详细了解这些方法