2012-02-09 1 views
3

Java가 설치되지 않은 경우에도 모든 시스템에서 실행할 수 있도록 JRE (각 Windows, Mac OSX 및 Linux 당 하나)와 함께 USB 스틱에 Java 응용 프로그램이 있습니다. USB 스틱이 제거되었는지 여부와 응용 프로그램을 종료하는지 여부를 감지 할 수있는 스레드가 있습니다.Java 런타임이 이동식 드라이브에있을 때 NoClassDefFoundError를 방지하는 방법은 무엇입니까?

나가기 전에 메시지를 표시하고 싶습니다 (또는 드라이브를 다시 삽입하라고 알려주고 싶습니다). 그러나 JOptionPane을 dispaly하려고하면 JRE가 USB와 함께 제거되었으므로 NoClassDefFoundError가 발생합니다.

Java가 더 이상 존재하지 않는 파일 시스템에서 파일을로드하지 못하도록 메모리에 필요한 클래스를 유지할 수있는 방법이 있습니까?

감사합니다.

답변

3

대부분의 런타임에로드 된 클래스는 이고 Java 메모리의 PermGen 섹션에는이됩니다.

내 생각에 오류가 발생하는 것은 이전에로드되지 않은 클래스가 필요하다는 것입니다.이 클래스는 더 이상 존재하지 않는 드라이브에서만 사용할 수 있습니다.

프로그램을 시작할 때 논리를 표시하는 오류를 트리거하여 눈에 보이지 않는 모드로 표시하는 것을 제외하면이 문제를 해결할 수 있습니다. 이것은 필요한 모든 클래스가로드되도록 동일한 코드 경로를 실행하고 오류를 표시해야 할 때 이미 알려 졌는지 확인해야합니다. 이 작업이 너무 어려울 경우 각 클래스에 대해 수동으로 Class.forName("javax.swing.JOptionPane")을 수동으로 호출 할 수 있습니다. 하드 코드 된 클래스를 업데이트하지 않고 렌더링 코드를 변경하면 더 부서지기 쉬워지기 쉽습니다.

이 아닌 경우 (즉, 필요한 모든 클래스가 이전에로드되었지만 여전히 문제가있는 경우) 런타임에서 클래스가 분명히 언로드됩니다. 여기서 수행중인 작업과 그 작업을 중지하는 방법을 보려면 해당 설명서를 살펴 봐야합니다.

관련 문제