2016-03-27 14 views
1

FXMLファイルを読み込んでアプリケーションウィンドウとして表示しようとしていますが、例外が表示されます。 FXMLファイルは、FXMLシーンビルダによって作成されました。アプリケーション起動メソッドの例外

Sup.javaファイル:

package sup; 

import java.io.IOException; 
import javafx.application.Application; 
import javafx.fxml.FXMLLoader; 
import javafx.scene.Parent; 
import javafx.scene.Scene; 


public class Sup extends Application { 

    @Override 
    public void start(Stage primaryStage) throws IOException { 
     Parent root = FXMLLoader.load(getClass().getResource("sample.fxml")); 



     primaryStage.setTitle("Sup"); 
     Scene scene = new Scene(root, 300, 250);   
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 

} 

sample.fxmlファイル:構造の

<?import javafx.geometry.Insets?> 
<?import javafx.scene.layout.GridPane?> 

<?import javafx.scene.control.Button?> 
<?import javafx.scene.control.Label?> 
<?import javafx.scene.text.Text?> 
<?import javafx.scene.control.TextField?> 
<GridPane fx:controller="sup.Controller" 
    xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10" vgap="5"> 

    <Text text="Sup" 
     GridPane.rowIndex="0" 
     GridPane.columnSpan="2" 
     GridPane.halignment="CENTER"/> 

    <Label text="First Name:" 
     GridPane.rowIndex="1" 
     GridPane.columnIndex="0"/> 

    <TextField 
     GridPane.columnIndex="1" 
     GridPane.rowIndex="1"/> 

    <Button text="Say Sup!" 
     GridPane.rowIndex="2" 
     GridPane.columnIndex="1" 
     GridPane.halignment="RIGHT"/> 

</GridPane> 

スクリーンショット:

enter image description here

エラーメッセージ:

Exception in Application start method 
java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389) 
    at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767) 
Caused by: java.lang.RuntimeException: Exception in Application start method 
    at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917) 
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$155(LauncherImpl.java:182) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.NullPointerException: Location is required. 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3207) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3175) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3148) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3124) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3104) 
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3097) 
    at sup.Sup.start(Sup.java:34) 
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863) 
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326) 
    at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294) 
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) 
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
    at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191) 
    ... 1 more 
Exception running application sup.Sup 

答えて

3

例外の根本原因はNullPointerExceptionで、詳細メッセージは「ロケーションが必要です」です。私は、スタックトレースを読む方法をご案内するつもりはない

Caused by: java.lang.NullPointerException: Location is required. 

、代わりにthis questionを参照してください。

nullFXMLLoader.load()メソッドに渡すので、「場所が必要です」というエラーが表示されます。 nullの値は、明らかにgetResource()コールから来なければなりません。 Class.getResource()ドキュメントから:

[...]

戻り値:この名前を持つリソースが見つからない場合
URLオブジェクトまたはnull

[...]

例外が発生する理由は、g指定された名前が見つかりません。

有効にしてください次:

あなたが標準 Eclipseプロジェクトのレイアウトを使用している場合
  • :あなたが使用している場合は、Sup.javaファイル
  • と同じディレクトリにsample.fxmlを置いていることを確認しますmavenのようなディレクトリ構造リソースとソースに異なるディレクトリがある場合は、sample.fxmlがリソースフォルダにあり、ソースファイルと同じディレクトリにあることを確認してください。

    例:ソースファイルSup.javaは、src/main/java/com/example/Sup.javaに配置されています。 sample.fxmlファイルをsrc/main/resources/com/example/sample.fxmlに配置します。

  • eclipseを使用している場合は、プロジェクトをクリーニングして再構築してください。ビルドツールにも同様の選択肢があります(または、build/outディレクトリを削除する)

関連する問題