скрыть кнопку, затем подождать 2 секунды, прежде чем показывать ее снова, после нажатия - PullRequest
1 голос
/ 22 апреля 2011

У меня есть школьный проект, который я делаю, в котором я должен заставить свой код скрыть кнопку, затем спать, а затем продолжить, но она никогда не скрывает кнопку.

У меня есть один класс, которыйзапускается нажатием кнопки, затем запускает другой метод, который должен скрыть кнопку, а затем запускает метод в другом классе, который выполняет кучу вещей, которые он делает отлично, а затем запускает 3-й метод в 3-м классе,где первое, что он должен сделать, это сон, но он спит, прежде чем скрыть мою кнопку, и полностью пропускает скрытие моей кнопки.

Вот часть кода (не обращайте внимания на датские значения / имена методов):

public void turncard(final int navn,boolean spiller){
    knap.setVisible(false);
    EqualCheck.storevalue(this,spiller);
}

я знаю, что эта часть окружена символом if .. но она вызывается вот так.

if(spiller){                   //tester om det er spilleren der har vendt kort,
   kort.repaint();             //og hvis det er, så starter den computerens
   Main.spillet.computertur(); //tur.
}

и затем при запуске метода computertur

public void computertur() {
    for(int i = 0; i < kortene.size(); i++) {
        kortene.get(i).knap.setEnabled(false);
    }
    try {
        Thread.sleep(2000);
    } catch ( Exception e) {
        System.out.println("sleep failed.");
    }

Я читал о команде invokeAndWait, которая должна быть лучше для EDT: s, но как я могу использовать ее, чтобы приостановить mythread ... или даже, лучше вопрос, почему нет?скрыть кнопку?:) Я имею в виду, что в моей голове я звоню setVisible(false), прежде чем что-то еще спрячет, прежде чем что-то еще сделает .. Почему не так?

1 Ответ

2 голосов
/ 22 апреля 2011

Вы никогда не должны вызывать Thread.sleep (...) при выполнении кода в потоке диспетчеризации событий (EDT).Это замораживает графический интерфейс и не позволяет перерисовывать себя.

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

...