我正在使用Java Swing应用程序,在那里我有一个主框架和多个面板,我通过设置它们可见或不同时在它们之间通勤,同时,我实例化一个正在运行while循环的类背景。现在,问题是:除非while循环结束,否则面板不会出现,但我想让用户点击某些按钮,而while循环在后台继续,甚至他都不知道。以下是我的代码的一个小例子:
startPage.setVisible(false);
lblError.setVisible(false);
new QuestionPage(Integer.parseInt(fieldUserID.getText()));
QuestionPage
有一个while循环,我希望不会冻结整个应用程序,直到完成,但是让while循环在后台运行。到目前为止,我尝试通过扩展Thread类来做2个线程,但我不确定这是否是正确的方法。
[编辑]
这是我使用SwingWorker后的NEXT
按钮,以便在后台发送QuestionPage
类中发生的while循环,并在主框架上进行摆动操作
btnStart.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (validateInput(fieldUserID.getText(), fieldAge.getText(), fieldSex.getSelectedItem().toString(), fieldExperience.getText())) {
startPage.setVisible(false);
lblError.setVisible(false);
SwingWorker worker = new SwingWorker<Void, String>() {
@Override
public Void doInBackground() {
new QuestionPage(Integer.parseInt(fieldUserID.getText()));
return null;
}
};
} else {
lblError.setVisible(true);
}
};
});
答案 0 :(得分:0)
[ANSWER]
诀窍是使用SwingWorker在后台发送长时间运行的任务,并在其上调用execute()
。以下是Start
按钮事件侦听器的最小工作示例:
// Send long running task in background
SwingWorker worker = new SwingWorker<Void, String>() {
@Override
public Void doInBackground() {
new QuestionPage(Integer.parseInt(fieldUserID.getText()));
return null;
}
};
worker.execute();