У меня есть приложение для банковского gui, над которым я сейчас работаю, и, похоже, проблема с setvisible методом для моего jdialog. После того, как пользователь отозвал действительную сумму, я открываю простой диалог, в котором говорится, что «транзакция продолжается». В моем методе dobackground я продолжаю опрос, чтобы проверить, была ли получена транзакция. Я пытался использовать swingworker, и я не понимаю, почему он не работает. Если я удаляю setvisible-вызов, он работает нормально, так почему setvisible заставляет систему зависать? Вот код, который находится внутри моего JButton MouseListener:setvisible метод в 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();
В какой версии java вы видели эту блокировку? Мы обновили с java 6 до java 8 и могли работать в этом поведении. – simgineer