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 ステートメントに入らない場合に問題が発生します。これが私の問題の原因でしょうか? 私のコンピューターにはこのバグはありません。正常に動作します。