Ho un'applicazione di GUI bancaria a cui sto lavorando attualmente e sembra che ci sia un problema con il metodo setvisible per il mio jdialog. Dopo che l'utente ha ritirato un importo valido, faccio apparire una semplice finestra di dialogo che dice "transazione in corso". Nel mio metodo dobackground tengo il polling per verificare se la transazione è stata ricevuta. Ho provato ad usare Swingworker e non capisco perché non funzioni. Se rimuovo la chiamata setvisibile funziona bene, quindi perché setvisible fa sì che il sistema si blocchi? Ecco il codice che è dentro il mio JButton MouseListener:metodo setvisible nel sistema di sospensione java
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();
Quale versione di java hai visto questo blocco? Abbiamo aggiornato da java 6 a java 8 e potrebbe essere in esecuzione in questo comportamento. – simgineer