2016-09-26 9 views
1

私は最初にユーザーがログインする必要のあるアプリケーションを持っています。 。私はこのNullPointerExceptionが取得する理由を知らないJavaFX - アプリケーションを拡張しないコントローラクラスにスタイルシートを追加するには?

Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException 
    at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1774) 
    at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1657) 
    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.EventUtil.fireEventImpl(EventUtil.java:74) 
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49) 
    at javafx.event.Event.fireEvent(Event.java:198) 
    at javafx.scene.Node.fireEvent(Node.java:8411) 
    at javafx.scene.control.Hyperlink.fire(Hyperlink.java:153) 
    at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:182) 
    at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:96) 
    at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:89) 
    at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218) 
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80) 
    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.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:380) 
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:294) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$354(GlassViewEventHandler.java:416) 
    at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389) 
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:415) 
    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(Unknown Source) 
Caused by: java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at sun.reflect.misc.Trampoline.invoke(Unknown Source) 
    at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at sun.reflect.misc.MethodUtil.invoke(Unknown Source) 
    at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1769) 
    ... 48 more 
Caused by: java.lang.NullPointerException 
    at controller.LoginController.goBackToLoginView(LoginController.java:50) 
    ... 58 more 

たときにユーザーを押して、それだけで起こる:すべては(...)を追加し、私はオールウェイズ次のエラーを取得する)私は.getStylesheetsを(使用する場合を除き、正常に動作します私は次のコードをコメントアウトした場合

@FXML 
private void goBackToLoginView(ActionEvent event) throws IOException { 
    Parent loginView = FXMLLoader.load(getClass().getResource("/view/LoginView.fxml")); 
    Scene loginScene = new Scene(loginView, 330, 350); 
    loginScene.getStylesheets().add(getClass().getResource("application.css").toExternalForm()); 

    Stage app = (Stage) ((Node) event.getSource()).getScene().getWindow(); 
    app.setScene(loginScene); 
    app.show(); 
} 

loginScene.getStylesheets().add(getClass().getResource("application.css").toExternalForm()); 

を、私は例外を取得ドット戻るボタンには、次のアクションをトリガーログインページに移動するボタン。誰かが私にこのことが起こる方法を説明できますか?ありがとうございました。

+1

明らかに、 'getResource(" application.css ")'は 'null'を返します。正しいパスを使用する必要があります。 – fabian

+0

プロジェクトの構造を表示して、正しいパスを見つけるのを助けてください。 –

+0

OK。ありがとう、私は "application/application.css"でパスを修正しました。できます。どのような単純な間違い。 :/ – Rep

答えて

2

getClass().getResource("application.css")は、を呼び出すときにNPEを取得するようにnullを返すことは明らかです。あなたは (あなたのケースでLoginControllerある)呼び出し元のクラスと同じパッケージ内にある場合にのみapplication.css

  1. classpath
  2. になっている場合getClass().getResource("application.css")が非null値を返すことを理解する必要があります

    したがって、パスはディレクトリからの相対パスである必要があります。からアクセスできる場合は、NPEを取得します。/controller

    あなたのファイルがクラスパスのルートにあると仮定すると、それはむしろgetClass().getResource("/application.css")であるべきです。

1

fxmlファイルのスタイルシートを参照してください。 cssファイルとfxmlファイルが同じディレクトリにある場合は、例のようにスタイルシートを追加することができます。そうでない場合は、適切にURLを指定します。この例のCSSは、タブペイン全体に適用されます。

<?xml version="1.0" encoding="UTF-8"?> 
... 
<TabPane ...> 
    <tabs> 
    ... 
    ... 
    </tabs> 
<stylesheets> 
    <URL value="@application.css" /> 
</stylesheets> 
</TabPane> 
関連する問題