2010-12-22 4 views
1

다른 것들 사이에서 (jfreechart를 사용하여) 그래프를 표시하는 양식을 만들었습니다. 그래프는 동적으로 생성 된 데이터를 표시합니다. 다음과 같이 내가 스레드를 사용하는 데이터를 생성하려면 :JButton에 대한 응답으로 스레드를 실행하는 중 문제가 발생했습니다.

class Grapher extends JFrame implements Runnable{ 
     .... 
    public void run(){ 
      Thread thisT = Thread.currentThread(); 
    while(true){ 
     try{  
      double a = getRand(); 
      System.out.println(a); 
      Millisecond millisecond = new Millisecond(); 
      if(a == 100){thisThread.stop();} 
      timeseries.add(millisecond, a); 
      Thread.sleep(100); 
     }catch(InterruptedException e){} 
    } 

나는이 같은 내 프로그램을 설정, 내 GUI 내에서 미세 그래프 표시하지만, 즉시 시작됩니다. 내가 마지막 줄 graph.run()을 그리워하고하는 JButton 이벤트 리스너에 이것을 추가하면

 Grapher graph = new Grapher(); 
    MyForm testForm = new MyForm(); 

    testForm.addGraph(graph);  
    testForm.pack(); 
    testForm.setVisible(true); 
    graph.run(); 

, 내가 버튼을 클릭하면, 나는 콘솔에 표시 번호를 얻을로 스레드가 실행되는 것을 볼 수 있습니다. 그러나 그래프가 업데이트되지 않고 전체 양식이 멈 춥니 다.

왜 이런 일이 발생하는지 잘 모르겠지만 스레드와 관련이 있다고 생각합니까?

+1

'확장 JFrame은 Runnable을 구현합니다 .'는 열악한 디자인처럼 보입니다. 또한,'Thread.stop'은 더 이상 사용되지 않습니다. 또한'run'에서'currentThread'는 항상 쓰레드 자체입니다. 귀하의 질문에 대한 대답은 없습니다. – khachik

+0

그래, 내 IDE가 stop이 더 이상 사용되지 않는다고 말하고있다. 나는 그걸 들여다 보았다. 그러나, 나는 한 번 스레드를 멈출 수있는 방법을 모르겠다 == 100. 팁 주셔서 감사합니다 :) – Roger

답변

1
new Thread(new Grapher()).start(); 
1

당신은 당신의 코드에 "잠시 true"로 루프를 안 읽어 보시기 바랍니다. 어떤 종류의 애니메이션을 원하면 Swing Timer를 사용하여 애니메이션을 예약하십시오. Swing 튜토리얼 링크에는 다른 대답 중 하나가 있습니다. 타이머 사용 방법 섹션도 있습니다.

관련 문제