2012-04-26 7 views
0

JUNG 또는 Prefuse를 사용하여 GraphML 소스 파일에서 그래프를 렌더링합니다. 이제 또 다른 프로그램은이 소스 파일을 주기적으로 새로운 노드와 에지로 업데이트합니다. 이러한 변화를 반영하기 위해 그래프를 업데이트하고 싶습니다. 두 가지 API 자체에서 (적절한 새로 고침 (TIMER) 또는 다시 그리기 (TIMER) 종류의 메소드를 사용하지 못하게하는) 항목을 찾을 수 없습니다. 이 작업을 수행하는 한 가지 방법은 일정 시간 후 JFrame을 종료하고 전체 데이터로드, 시각화 및 렌더링 프로세스를 다시 실행하는 것일 수 있지만 이는 나에게 적절하지 않은 것으로 보입니다.업데이트하는 방법 Prefuse 또는 JUNG 그래프의 소스 ​​GraphML 파일을 수정할 때 업데이트 하시겠습니까?

그럼 간단하고 신속하게 처리하는 것이 가장 좋은 방법은 무엇입니까? 감사합니다 :)

답변

1

"주기적으로"소스 파일을 확인하십시오. 파일에 대해 f 핸들을 걸어 놓은 경우 f.lastModified()을 쿼리 할 수 ​​있으며 마지막으로 확인한 이후 다른 프로그램이 더티 작업을 완료 한 경우 업데이트 할 수 있습니다. 다른 프로그램이 업데이트 파일 만 작성하는 경우 비슷한 솔루션이 적용됩니다 (변경 사항을 적용 할 수있는 권한이 있으면 읽어야 할 파일이 적고 모델에서 변경해야 할 내용을 정확하게 알고 있어야 함).

"주기적으로"는 끈적 끈적한 개찰판입니다. "모든 X (밀리 초) 초 체크"가 가능할 정도로 간단합니다. Java의주기적인 작업은 다양한 방법으로 구현 될 수 있습니다. this other question.

JUNG은 업데이트 데모에서 다시 렌더링/다시 페인트합니다. this one. 문서에 링크 된 tutorial (pdf)은 섹션 5의 동적 업데이트를 다룹니다 (이 섹션에서는 대화 형 기능에 대해 설명하지만 새로운 정보가 제공 될 때 업데이트해야 할 필수품이 모두 포함되어 있습니다).

+0

감사합니다 @ Carl, 나는 파일 렌더링을 위해 아파치 commons-io를'FileAlterationObserver'와'FileAlterationListener' 클래스로 시도했지만 훨씬 더 나은 로직과 조작 옵션을 제공합니다. . 고마워. – xkcd

+0

@ xkcd 이는 DIY의 참 좋은 대안입니다. 행운을 빌어 요. – Carl

0

JUNG은 변경 사항을 수신 대기 할 수있는 래퍼 (ObservableGraph)를 제공합니다.

업데이트에 대한 알림을 받으면 레이아웃을 업데이트 한 다음 시각화를 새로 고쳐야합니다. 후자는 스윙에 대한 일반적인 방법으로 수행됩니다.

+0

저는 다른 프로그램이 'ObservableGraph' 인스턴스를 통해 그래프를 수정하지 않으므로 수정 이벤트가 발생하지 않을 것이라고 확신합니다. – Carl

+0

정확히 맞습니다. 다른 프로그램은 시각화 프로그램의 존재를 알지 못합니다. GraphML 파일에 데이터를 입력하기 만하면됩니다. – xkcd

+0

아, 나는 당신이 그래프가 아니라 파일에 대한 업데이트에 대해 이야기하고 있다는 것을 놓쳤습니다. –