Tôi có ứng dụng gui ngân hàng mà tôi hiện đang làm việc và dường như có vấn đề với phương pháp setvisible cho jdialog của tôi. Sau khi người dùng đã rút một số tiền hợp lệ, tôi bật lên một hộp thoại đơn giản cho biết "giao dịch đang diễn ra". Trong phương pháp dobackground của tôi, tôi tiếp tục bỏ phiếu để kiểm tra xem giao dịch đã được nhận chưa. Tôi đã thử sử dụng swingworker và tôi không hiểu tại sao nó không hoạt động. Nếu tôi loại bỏ các cuộc gọi vô hình nó hoạt động tốt, vậy tại sao không thể làm cho hệ thống bị treo? Đây là mã nằm bên trong jbutton mouselistener của tôi:phương pháp vô hình trong hệ thống treo java swing
SwingWorker<String,Integer> worker = new SwingWorker<String,Integer>(){
JDialog waitForTrans = new JDialog((JFrame)null,true);
public String doInBackground() throws Exception {
waitForTrans.add(new JLabel("Updating balance in system. Please Wait..."));
waitForTrans.setMinimumSize(new Dimension(300,100));
waitForTrans.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
waitForTrans.setVisible(true);
Bank.getInstance().sendTransaction(currentPin,"-"+withdraw);
while(!Bank.getInstance().hasCompletedTransaction){
}
return null;
}
public void done(){
try {
this.get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
waitForTrans.setVisible(false);
newField.setText(String.valueOf(Bank.getInstance().getAccountList().get(currentPin).getBalance()));
}
};
worker.execute();
Phiên bản java nào bạn đã thấy chặn này? Chúng tôi đã nâng cấp từ java 6 lên java 8 và có thể đang chạy vào hành vi này. – simgineer