2009-03-19 4 views
0

이 어떤 작업을 수행하는 루프를 다시 칠 :JFrame의 제목 내가 JFrame의 제목의 상태를보고 싶어, 그래서 나는 이런 식으로 뭔가가 내 JFrame의에서

frame.setTitle ("현재 상태를 ["+ Auto_Count_Id + "/"+ Auto_Count_Total +"] ");

하지만 필자가 필요로하는 것처럼 다시 그리지는 않습니다. 그래서 시도 다음

<1> 

    SwingUtilities.invokeLater(new Runnable() 
    { 
     public void run() 
     { 
     frame.setTitle("Current status [ "+Auto_Count_Id+"/"+Auto_Count_Total+" ]"); 
     } 
    }); 

<2> 
    // repaint(long time, int x, int y, int width, int height) 
    frame.repaint(10,0,0,500,300) 

그들 중 하나가 작동하지 않습니다, 그것은 단지 완료 작업 후 페인트 다시, 내가 무엇을 할 수 있습니까?

답변

3

Swing의 이벤트 스레드에서 과장된 작업을 수행하지 마십시오. 스윙이 스레드를 사용하여 GUI를 다시 칠할 수 있도록 계산을위한 새 스레드를 만듭니다.

0

네, SwingWorker가 좋습니다.

Java 6을 사용하는 경우에는 publish() 및 process() 메소드가 포함 된 SwingWorker 버전이 제공됩니다. 이 메소드는 장기 실행 태스크를 실행하는 동안 데이터를 공개 할 수 있도록 해 주며 해당 데이터를 이벤트 파견 스레드에 게시 할 수 있습니다.

장기 실행 작업이 정의 된 SwingWorker 하위 클래스를 만들면됩니다. 그런 다음 장기 실행 작업에서 publish() 메소드를 사용하여 JFrame 제목 문자열을 게시하십시오. 프로세스 메소드를 덮어 쓰면 JFrame의 제목을 설정할 수 있습니다.

Here's the SwingWorker API doc for Java 6

관련 문제