为了使您
SwingWorker能够进行后台工作,您需要调用
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(); }};


