0

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

4

1 に答える 1