2016-07-21 2 views
3

JavaFX 응용 프로그램을 개발하려고합니다. 나는 플러그인 시스템을 만들어야한다. 내 응용 프로그램은 4 개의 AnchorPanes를 삽입하려는 4 개의 장소가있는 GridPane으로 구성됩니다.JavaFX 창을 동적으로 플러그인으로로드하십시오.

이 AnchorPanes를 플러그인으로 사용하고 싶습니다. 다음과 같은 아키텍처가 있습니다 :

My Application 
    + src 
     + controller 
     + view 
     + Main.java 
    + res 
    + lib 
    + plugin 
     + plugin.jar 
      + plugin 
       + Controller.java 
       + view.fxml 

내 플러그인을 로더로 동적으로 호출하고 싶습니다. 나는 아무것도 터치하지 않는 경우

FXMLLoader loader = new FXMLLoader(); 
loader.setLocation(new URL(path)); 
pane = loader.load(); 

, 나는 다음과 같은 오류 있어요 : 내 .JAR을 마우스 오른쪽 버튼으로 클릭하면

java.lang.ClassNotFoundException: plugin.Controller 

을 나는 선택에서 "라이브러리로 추가"내 IDE, 완벽하게 작동합니다. 그러나 필자는 플러그인을 동적으로 추가하여이 조작을해서는 안된다. ClassPath의 문제라고 생각하지만 해결 방법을 모르겠습니다.

+0

'path'의 값은 무엇입니까? 상대 경로 인 경우 현재 작업 디렉토리는 무엇입니까? 'loader'는 ClassLoader인가요? 만약 그렇다면 어느 것입니까? – Thomas

+0

경로의 값이 내 fxml에 대한 올바른 경로입니다. 상대 경로가 아닙니다. 음, fxml 파일의 로딩은 작동하지만 연관된 컨트롤러는 작동하지 않습니다. 로더는 FXMLLoader입니다. –

+0

응용 프로그램 (일명 플러그인)에 jar를 동적으로 추가하려면 (예 :'plugin/*'과 같은 것을 클래스 패스에 추가하는 것과 같이) 응용 프로그램을 시작할 때 클래스 패스에 넣거나 클래스 로더를 사용하여 런타임시 플러그인 항아리. – Thomas

답변

0

플러그인 메인 클래스와 메인 메소드를로드하면 fxml 파일을로드 할 수 있으며 fxml의 컨트롤러도로드됩니다. 의 끝에는 기본 애플리케이션에 창 개체 (FXML NODE)가 반환됩니다.

관련 문제