2011-05-05 11 views
1

1 분마다 (60000l) 남은 시간을 표시하는 자동 새로 고침 기능을 구현 한이 JTable이 있습니다.자동 새로 고침 스키마에 데이터를 삽입하는 JTable

그러나 삽입 할 행이 아직 완료되지 않은 경우 (데이터 인코딩이 JTable 자체에서 수행됨) 데이터가 손실되면이 문제가 발생합니다. 데이터 손실을 방지하고 자동 새로 고침 기능을 제거하지 않습니다.

데이터를 삽입/업데이트하는 방식을 잃어 버리지 않도록 스레드 (SwingWorker (Void, Void)가 자동 새로 고침 기능에 사용됨)를 일시 중지 할 수 있습니까?

+2

"데이터 인코딩이 JTable 자체에서 수행되었습니다"는 의미는 무엇입니까? 이 문장은 디자인 냄새처럼 보입니다 ... 우리에게 보여줄 코드가 있습니까? 특히 스윙 워커와 테이블 모델은 점검하는 것이 중요합니다. 또한 일반적으로 SwingWorker는 한 번만 사용되며 사용 사례 (자동 새로 고침)에 적합하지 않은 것처럼 보입니다. 어떻게 사용합니까? – jfpoilpret

+0

글쎄, 나는 SwingWorker 안에 다른 스레드를 만들었다. 이제는 스레드가 될 것입니다 ... –

+0

물론, JTable (또는 TableModel)에 대한 변경 사항은 EDT 내부에서 수행되어야하므로 스레드는 invokeLater/invokeAndWait를 사용해야합니다. 결과를 UI에 채 웁니다. – jfpoilpret

답변

0

자동 새로 고침과 업데이트가 동일한 스레드에서 발생하는지 확인하십시오. 이렇게하면 현재 업데이트가 완료 될 때까지 자동 새로 고침이 실행되지 않습니다.

EDT (Event Dispatch Thread)는 좋은 후보입니다. 특히 Swing에 이미 EDT의 작업을 대기시키는 프레임 워크가 포함되어 있습니다.

public void autorefresh() { 
    SwingUtilities.invokeLater(
     new Runnable() { 
      ... 
      // code to request refresh goes here. 
     } 
    ); 
} 
+0

스레드에 pause()라는 보호 된 메서드가 있습니까? –