Ошибка при запуске потока

296
10 мая 2017, 07:18

Есть следующий код:

@Override
public void doSomething(Action action) {
    if(action == Action.GO){
        try{
            if(!t.isAlive()) t.start();
        }catch(IllegalThreadStateException e){System.out.println(x + " " + y);}
    }
}

Этот метод вызываеться другим потоком каждые 0.2 секунды. При завершении работы потока t, начинают выводиться x и y (это значит что выпадает IllegalThreadStateException). Вот код который вызывает этот метод:

@Override
public void actionPerformed(ActionEvent e){
    Graphics g = Controller.getPanel().getGraphics();
    g.clearRect(0, 0, 800, 600);
    man.getHealth().paint(g, (man.getX()) * 10 - 8, (man.getY()) * 10 - 15);
    g.drawImage(man.getSprite(), man.getX() * 10, man.getY() * 10, Controller.getPanel());
    ((Teamate)man).setRouter(router);
    man.doSomething(Action.GO);
    ((Teamate)man).setRouter(new Router(30, 30));
    man.doSomething(Action.GO);
}

А вот метод setRouter():

public void setRouter(Router router){
    if(!t.isAlive()){
        this.router = router;
        this.direction = router.getDirection(this);
    }
}

Boт Exception:

Exception in thread "AWT-EventQueue-0" java.lang.IllegalThreadStateException
    at java.lang.Thread.start(Unknown Source)
    at com.LTP.AC.Objects.Teamate.doSomething(Teamate.java:94)
    at com.LTP.AC.main.Game.actionPerformed(Game.java:24)
    at javax.swing.Timer.fireActionPerformed(Unknown Source)
    at javax.swing.Timer$DoPostEvent.run(Unknown Source)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$500(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

Почему вылетает Exception, и как все таки запустить поток сново по завершению?

READ ALSO
Как сделать one to one undirectional mapping hibernate

Как сделать one to one undirectional mapping hibernate

Я имею следующую схему БД:

235
JNI - Failed to write core dump. Minidumps are not enabled by default on client versions of Windows

JNI - Failed to write core dump. Minidumps are not enabled by default on client versions of Windows

Пишу приложение на Java, использующее dll-библиотеку методов, реализованных на С++ (технология JNI)Оказалось, что для разной разрядности установленной...

268
Где писать проверку в паттерне PageObject?

Где писать проверку в паттерне PageObject?

Доброго времени сутокВопрос первый: Подскажите пожалуйста где правильно писать проверку на нахождение на нужной странице и нужно ли вообще...

163