2016-12-02 18 views
1

私はこのテーマについていくつかの調査を行いましたが、依然として固執しています。スタックオーバーフローでこれをやっている他の方法も検索しましたが、これまでのところ運がありません。サンプルなしで試してみました。別のフォルダに移動しましたが、何も動かなかったのです。ここ構造です:FXMLのパスが見つからない

enter image description here

主なJavaコード

package sample; 

import javafx.application.Application; 
import javafx.fxml.FXMLLoader; 
import javafx.scene.Parent; 
import javafx.scene.Scene; 
import javafx.stage.Stage; 

public class Main extends Application { 

@Override 
public void start(Stage primaryStage) throws Exception{ 
    Parent root=FXMLLoader.load(getClass().getResource("sample/ui.fxml")); 
    primaryStage.setScene(new Scene(root)); 
    primaryStage.show(); 
} 

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

Controller.javaコード

package sample; 

import javafx.event.ActionEvent; 
import javafx.fxml.FXML; 
import javafx.scene.text.Text; 

public class Controller { 

@FXML 
private Text output; 

@FXML 
private void processNumpad(ActionEvent event){ 

} 
@FXML 
private void processOperator(ActionEvent event){ 

} 

} 

ui.fxmlコード

<?xml version="1.0" encoding="UTF-8"?> 

<?import java.net.*?> 
<?import java.lang.*?> 
<?import java.util.*?> 
<?import javafx.beans.property.*?> 
<?import javafx.geometry.*?> 
<?import javafx.scene.shape.*?> 
<?import javafx.scene.control.*?> 
<?import javafx.scene.image.*?> 
<?import javafx.scene.layout.*?> 
<?import javafx.scene.text.*?> 
<?import javafx.scene.paint.Color?> 

<VBox spacing="10" alignment="CENTER" prefWidth="300" prefHeight="300" fx:controller="sample.Controller" xmlns:fx="http://javafx.com/fxml"> 
    <fx:define> 
     <Font fx:id="FONT" size="18" /> 
    </fx:define> 

    <StackPane alignment="CENTER"> 
     <Rectangle fill="TRANSPARENT" stroke="GRAY" width="230" height="50" /> 
     <Text fx:id="output" font="$FONT" /> 
    </StackPane> 

    <HBox spacing="10" alignment="CENTER"> 
     <Button text="7" prefWidth="50" font="$FONT" onAction="#processNumpad" /> 
     <Button text="8" prefWidth="50" font="$FONT" onAction="#processNumpad" /> 
     <Button text="9" prefWidth="50" font="$FONT" onAction="#processNumpad" /> 
     <Button text="/" prefWidth="50" font="$FONT" onAction="#processOperator" /> 
    </HBox> 

    <HBox spacing="10" alignment="CENTER"> 
     <Button text="4" prefWidth="50" font="$FONT" onAction="#processNumpad" /> 
     <Button text="5" prefWidth="50" font="$FONT" onAction="#processNumpad" /> 
     <Button text="6" prefWidth="50" font="$FONT" onAction="#processNumpad" /> 
     <Button text="*" prefWidth="50" font="$FONT" onAction="#processOperator" /> 
    </HBox> 

    <HBox spacing="10" alignment="CENTER"> 
     <Button text="1" prefWidth="50" font="$FONT" onAction="#processNumpad" /> 
     <Button text="2" prefWidth="50" font="$FONT" onAction="#processNumpad" /> 
     <Button text="3" prefWidth="50" font="$FONT" onAction="#processNumpad" /> 
     <Button text="-" prefWidth="50" font="$FONT" onAction="#processOperator" /> 
    </HBox> 

    <HBox spacing="10" alignment="CENTER"> 
     <Button text="0" prefWidth="110" font="$FONT" onAction="#processNumpad" /> 
     <Button text="=" prefWidth="50" font="$FONT" onAction="#processOperator" /> 
     <Button text="+" prefWidth="50" font="$FONT" onAction="#processOperator" /> 
    </HBox> 

</VBox> 

エラー

> Exception in Application start method 
Exception in thread "main" 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 sample.Main.start(Main.java:13) 
    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 

私は、XMLと一緒にJavaFXの詳細を学ぶためにthis tutorialを以下のよ。

答えて

0

これは、の重複にかなり近いです:あなたの特定のディレクトリ構造については

、次のように動作します:

getClass().getResource("ui.fxml") 

を上記のあなたのFXMLことを前提としていあなたの質問に太字で名前を付けたように、ファイルは実際にui.fxmlと呼ばれます(あなたのスクリーンショットにはsample.fxmlがあるので、何かそこに間違っている...)。

リソースルックアップは、すでにサンプルフォルダにあるクラスの場所を基準にしているため、getResourceの呼び出しではリソースファイルui.fxmlの前にsample/は必要ありません。相対的なルックアップではなく絶対的なルックアップを望むなら、/sample/ui.fxmlを使うこともできます。

calc

+0

まあ、試してみました、そしてそれは同様に動作しませんでした。 –

+0

私のために働き、電卓のUIを表示します。 – jewelsea

+0

InteliJと関連がありますか?おそらく –

関連する問題