2016-06-12 5 views
0

메인 창 사각형을 클릭하면 새 창에 이미지를 표시하려고하는데 다음과 같은 오류가 발생합니다. "스레드"JavaFX 응용 프로그램 스레드 "예외"java.lang.NullPointerException "컨트롤러 간의 통신 JavaFX

먼저 제어기 (ControllerImpl)는 제 제어기 (ControllerImage)를 초기화하고 그 방법 중 하나를 호출 (controllerImage.displayImageSel)

:

@FXML 
private ControllerImage controllerImage = new ControllerImage(); 
public void rectangleSave(Rectangle r, String imagePath) { 
    r.setOnMousePressed((event) -> { 
     try { 
      Stage imageStage = new Stage(); 
      FXMLLoader loader = new FXMLLoader(getClass().getResource("/images.fxml")); 

      Rectangle2D primScreenBounds = Screen.getPrimary().getVisualBounds(); 
      imageStage.setX(0); 
      imageStage.setY(0); 
      imageStage.setHeight(primScreenBounds.getHeight()); 
      imageStage.setWidth(primScreenBounds.getWidth() * 0.7); 
      imageStage.setTitle("JavaFX Scene Graph Demo"); 

      Scene scene = new Scene(loader.load()); 
      imageStage.setScene(scene); 
      imageStage.show(); 

      controllerImage.displayImageSel(imagePath); 

     } catch (IOException e) { 
      System.out.println("Me cago en el PP"); 
     } 
    }); 
} 

둘째 제어기 ControllerImpl 호출 스택 창 및 방법을 포함 012 SPI는이 FXML 파일에 정의되어 물론 37,542,498,154,645,

:

 <StackPane fx:id="Spi"...... 

문제 ControllerImage가 StackPane SPI는 찾을 수 없다. 나는 이것과 관련된 모든 종류의 솔루션을 구현해 왔지만 지금까지 아무도 연구하지 않았다.

도움 주셔서 감사합니다.

편집 : 새로운 오류 메시지

javafx.fxml.LoadException: Root value already specified. 

/C:/tutorial-app/tutorial-app/target/resources/main/images.fxml /C :/튜토리얼 - 응용 프로그램/자습서 - 응용 프로그램/대상/자원/주/images.fxml

at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2597) 
at javafx.fxml.FXMLLoader.createElement(FXMLLoader.java:2755) 
at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2704) 
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2527) 
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441) 
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2409) 
at tutorial.controller.impl.ControllerImpl.lambda$rectangleSave$1(ControllerImpl.java:146) 
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86) 
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) 
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) 
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) 
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54) 
at javafx.event.Event.fireEvent(Event.java:198) 
at javafx.scene.Scene$MouseHandler.process(Scene.java:3757) 
at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485) 
at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762) 
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494) 
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:352) 
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:275) 
at java.security.AccessController.doPrivileged(Native Method) 
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$354(GlassViewEventHandler.java:388) 
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389) 
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:387) 
at com.sun.glass.ui.View.handleMouseEvent(View.java:555) 
at com.sun.glass.ui.View.notifyMouse(View.java:937) 
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191) 
at java.lang.Thread.run(Thread.java:745) 

답변

0

당신은하지 FXMLLoader을 통해 자신을 controllerImage를 만드는, 그래서 FXML 필드 주입 만나지. load도 해당 로더에 절대로 호출하지 마십시오.편집 : 죄송합니다. 방금 보았습니다.

는 "images.fxml"올바르게 설정 fx:controller을 가정하면, controllerImage의 할당을 제거하고 FXMLLoader#load에 호출 한 후이 줄을 추가 :

controllerImage = loader.getController(); 

을 당신이에 fx:controller 설정이없는 경우 FXML는 올바른 클래스로 설정하거나, 대신로드하기 전에 로더 에 만든 인스턴스를 전달 할 수 있습니다 :

loader.setController(controllerImage); 

이 경우 물론 초기화는 controllerImage으로 유지합니다.

+0

건배 메이트, 변경 사항을 적용했는데 이제는 IOException을 잡아 내고 "Me cago en el PP"를 인쇄합니다. 이 문제를 해결할 아이디어가 있습니까? –

+0

'e.printStackTrace()'를'catch' 절에 추가하고 완전한 스택 추적을 게시하십시오. 단지'IOException'은 너무 광범위하지만 잘못된 이미지 경로 나 요청 된 파일을 여는 권한이 충분하지 않기 때문일 수 있습니다. – Itai

+0

감사합니다. 오류가있는 게시물을 수정했습니다. –

관련 문제