1.JFrame вызов 2. JFrame - wait () => оба заблокированы? - PullRequest
0 голосов
/ 23 февраля 2011

У меня проблема: у меня есть jframe1, который звонит в ActionPerformed jframe2. JFrames являются потоками или? и поэтому я попытался в jframe2 метод wait (), а затем я бы уведомил jframe2 в jframe1 ..

мой код в jframe2 (метод, запускаемый при нажатии кнопки):

private void read(){

    synchronized(jframe1){
        try {

            if(writer.checkLast() == null){
                this.wait();
                jLabel.setText(writer.getLast());
            }
            else{
                jLabel.setText(writer.getLast());
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }


}

Но проблема в том, что если я использую this.wait (); в jframe2 мой jframe1 также заблокирован .. что я делаю не так?

извините за мой плохой английский, спасибо, если кто-нибудь получил ответ!

Ответы [ 2 ]

1 голос
/ 23 февраля 2011

У меня такое ощущение, что вы пытаетесь эмулировать поведение модального диалога с помощью метода wait (), но, как хорошо объясняет Майкл выше, не вызывайте wait для компонента Swing и не используйте Thread.спать.Вместо этого, если вы хотите отобразить другое окно модально, используйте JOptionPane или модальный JDialog.Это все хорошо объяснено в уроках.

1 голос
/ 23 февраля 2011

Рамки - это темы или?

Нет, абсолютно нет.Существует один единственный поток, в котором происходят все события рисования и пользовательского ввода, поток отправки событий.Однако этот поток отличается от основного потока приложения, что, вероятно, заставляет вас думать, что каждый кадр имеет свой собственный поток.

Поскольку все события происходят в потоке диспетчеризации событий, вам не нужноВыполните любую синхронизацию, и ваши кадры могут вызывать методы друг друга, не требуя никакой синхронизации или уведомления.Что является причиной однопоточного проектирования в первую очередь (общий консенсус заключается в том, что многопоточный графический интерфейс почти невозможно работать с).

...