为了使您Swing Worker
能够进行后台工作,您需要调用SwingWorker#execute()
方法。如果您不添加它,那么…它将不知道何时开始工作。就像其他任何变量一样:
JLabel label = new JLabel("Hello world");
但是,如果您从未将其添加label
到任何内容(或未ActionListener
添加到JButton
),则将永远不会添加/执行该内容。
worker.execute();
在构造函数内部或您希望其开始工作的任何地方。
根据@MadProgrammer的评论:
请记住,SwingWorker
可以返回数据,因此Boolean
可以String
使用方法实例字段返回,而不是返回,而是可以get
在done
方法中返回并使用它来获取工作程序的返回值,该方法更安全,更实用。
他指的是这样更改您的工人的代码:
SwingWorker worker = new SwingWorker<Boolean, Void>() {
@Override
public String doInBackground() {
return "<html><center>Lecture X : " + ticketDAO.getLectureX() + "</center></html>";
}
@Override
public void done() {
lectureXlabel.setText(get());
lectureXlabel.revalidate();
lectureXlabel.repaint();
componentsPanel.revalidate();
componentsPanel.repaint();
getContentPane().revalidate();
getContentPane().repaint();
}
};