2014-07-15 4 views
1

내 GUI는 스레드의 run 메소드가 호출 될 때마다 멈추고 아무도 이유를 알지 못합니까?GUI (Java)로 스레드 시작하기

홈페이지 :

public void run() { 
    while (true) { 
     System.out.println("test"); 
    } 
} 

의 actionListener 스레드를 시작하도록되어 :

private ActionListener btnStartListener = new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     robot.run(); 
    } 
}; 




public class RobotThread implements Runnable { 
@Override 
public void run() { 
    while (true) { 
     System.out.println("test"); 
    } 
} 

}

답변

5

때문이다 스레드에서

try { 
     // Set System Look and Feel 
     UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
    } catch (UnsupportedLookAndFeelException e) { 
     // handle exception 
    } catch (ClassNotFoundException e) { 
     // handle exception 
    } catch (InstantiationException e) { 
     // handle exception 
    } catch (IllegalAccessException e) { 
     // handle exception 
    } 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       MainFrame frame = new MainFrame(null, null); 
       frame.setVisible(true); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 

실행 방법메서드가 새 스레드를 시작하지 않습니다. robot 참조가 Runnable의 인스턴스를 참조한다고 가정하면 다음을 호출해야합니다.

new Thread(robot).start(); 

start()를 호출하면 새 스레드를 시작하고, 그 위에 run() 메소드를 호출합니다. 현재 run() 메소드가 호출 된 동일한 스레드에서 실행 중입니다 (인스턴스에서 이벤트 발송 스레드).

+1

새 스레드를 시작하지 않는 'run()'에 +1하지만 주 스레드가 아닌 이벤트 발송 스레드이므로 UI가 멈추는 원인이됩니다. –

+0

@ piet.t - 좋은 지적, 대답을 업데이트하겠습니다. –

+0

예, 로봇은 Runnable의 인스턴스를 참조합니다. 귀하의 답변을했지만 run() 코드가 실행되지 않습니다. – user3742929