), Swing является однопоточным, поэтому нарушение этого правила может привести к очень хитрым ошибкам и странным вещам в вашем пользовательском интерфейсе.

я есть приложение для банковского интерфейса, над которым я сейчас работаю, и, похоже, проблема с setvisible методом для моего jdialog. После того, как пользователь снял действительную сумму, я выскакиваю в простое диалоговое окно с надписью «транзакция в процессе». В моем методе dobackground я продолжаю опрос, чтобы проверить, была ли получена транзакция. Я попытался использовать Swingworker, и я не понимаю, почему это не работает. Если я удаляю вызов setvisible, он работает нормально, так почему setvisible вызывает зависание системы? Вот код, который находится внутри моего мышиного прослушивателя jbutton:

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();

Ответы на вопрос(4)

Ваш ответ на вопрос