有时我的 SwingWorker 的 doInBackgorund() 方法似乎没有被执行,它直接进入 done() 方法而不在我的一些客户端机器上保存或打印任何东西,所以我想这是一个随机的事情,我想不通出为什么。这是我的代码:
public class saveCmdWorker extends SwingWorker<Integer, Integer> {
Order ord;
public saveCmdWorker(Order ord) {
this.ord = ord;
}
@Override
public Integer doInBackground() {
if(999 != ord.getCaissier().getIdCaissier())
saveCmd(ord); // database queries
else
JOptionPane.showMessageDialog(null,"Error",JOptionPane.WARNING_MESSAGE);
if(ord.isIsProd() == false){
try {
// print via serial port
Printer.print(ord, false, Restaurant.numCaisse);
} catch (Exception ex) {
PosO2.errorLogger.log(Level.SEVERE, "Printing error", ex);
}
}
try {
Printer.printFacture(ord, false);
if(btnDuplicata.getForeground() == Color.red)
Printer.printFacture(ord, true);
} catch (Exception ex) {
PosO2.errorLogger.log(Level.SEVERE, "Printing error", ex);
}
return 1;
}
@Override
protected void done() {
try {
btnDuplicata.setForeground(Color.black);
ARendre = 0.0;
ord.clear();
for (int j = 0; j < tab_paiement.size(); j++) {
tab_paiement.get(j).setVisible(true);
}
montantRestant.setBackground(Color.red);
} catch(Exception e) {
PosO2.errorLogger.log(Level.SEVERE, "Refresh Error", e);
}
}
}
我通过这个 actionlistener 执行这个工人:
ActionListener encaissListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
worker = new saveCmdWorker(cmd);
worker.execute();
}
};
我没有任何可用的日志,所以我认为没有发现异常。我看到在 doInBackground() 中触发了 JOptionPane(考虑在其他线程中修改 ui 吗?)但是当应用程序不进入 else 语句时,问题就存在了。这可能是我的问题的原因吗?我的电脑上没有这个错误,它工作正常。