2010-01-08 3 views
-1

У меня есть один класс DataThread унаследованный от Thread. Я использую два объекта DataThreadReadThread и WriteThread. У меня есть еще одна тема, где работает Main_GUI.Вызов сна на текущем потоке нитей мой главный GUI

Теперь, когда я нажимаю кнопку main_GUI, он вызывает метод x.method1(), а затем этот метод использует метод WriteThread WriteThread.sleepForReset(). В

public void sleepForReset(){ 
    try { 
     sleep(28000); 
    } catch (InterruptedException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

При нажатии на кнопку main_GUI графического интерфейса стойл для 28000 миллисекунды. Если я звоню на WriteThread, то почему он останавливает main_GUI? Это потому, что сон - это статический метод? Если да, то кто-нибудь может предложить, как спать WriteThread, не затрагивая Main_GUI?

ответ

-1

Спасибо всем вам за то, что вы предлагаете мне разные варианты ..... Но я использовал TimeTask.schedule() и работал. Я назначил свою работу позже, вместо использования сна в текущей теме ......

1

Я думаю, что вызов людей. Выродки - это не обязательно хороший способ получить помощь, но чтобы ответить на ваш вопрос, вы видите сон, потому что вы вызываете Thread.sleep в потоке отправки событий. Работа GUI в Swing выполняется на одном потоке. Если вам нужно выполнить длительную работу фона, вы должны делегировать ее SwingWorker.

Кроме того, обработка прерванного исключения не очень надежна. По крайней мере, вы должны переинтерпретировать поток с помощью Thread.currentThread(). Interrupt().

+0

Спасибо за предложение ....... Я никогда не позвоню никому "Geek" в моей жизни ... Но что я могу сделать? Я отчаянно нуждаюсь в помощи ... :) –

6

Если вы вызываете WriteThread.sleepForReset() из своего метода actionPerformed, вы на самом деле вызываете его из потока EventDispatch. Даже если у вас есть объект, который представляет ваш WriteThread, вызов метода для этого объекта из потока EventDispatch приведет к тому, что процесс будет выполнен в EDT.

Посмотрите на this tutorial на использование рабочих потоков в Java. Обратите внимание, что этого недостаточно, чтобы просто иметь класс, который наследуется от Thread, вам нужно запустить экземпляры этих потоков, чтобы у вас было многопоточное приложение. Предоставленный учебник даст вам хорошую идею на одном из способов начать работу.