Мне нужно было бы увидеть иерархию классов, чтобы быть уверенным, поскольку я не на 100% знаю, когда и почему вызывается update()
, но вот то, что я подозреваю, происходит.
update()
вызывается дважды, сначала один раз (когда вы впервые показываете JOptionPane
), и снова по какой-то причине. Возможно, когда JOptionPane
отображается, уничтожается или вызывает перерисовку в каком-либо другом компоненте.
Гвоздь в том, что, хотя показано, что JOptionPane, выполнение в этом потоке остановлено, поэтому, когда он закрывается, происходит сумасшедшая борьба за потоки выполнения, и connectAndInit()
часто (или всегда) вызывается до того, как будет достигнут init=false
. Если вызовы update()
поступают из разных потоков, это, вероятно, предложение всегда .
Чтобы это исправить, измените код на:
if(init){
init=false;
connectAndInit();
}
И обойтись без init=false;
в connectAndInit()
.