JavaFX中需要使用gradle定位

Hug*_*its 7 javafx gradle

我越来越

java.lang.NullPointerException:位置是必需的.

当我使用gradle与javafx插件组装后运行我的程序时.如果我从IntelliJ Idea运行它,一切都很好.Java源文件和.fxml位于某个包中.

的build.gradle

apply plugin: 'java'
apply plugin: 'application'
apply plugin: 'idea'
apply from: 'javafx.plugin'

javafx {
    javaRuntime = 'C:\\Program Files\\Java\\jdk1.7.0_45'

    appID 'FXMLExample'
    appName 'fxml example application'
    mainClass 'local.hz.FXMLExample'
}

task "create-dirs" {
    sourceSets*.java.srcDirs*.each {it.mkdirs()}
    sourceSets*.resources.srcDirs*.each {it.mkdirs()}
}
Run Code Online (Sandbox Code Playgroud)

fxml_example.fxml

<?xml version="1.0" encoding="UTF-8"?>
<?import java.net.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.*?>

<GridPane fx:controller="local.hz.FXMLExampleController"
      xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10" vgap="10">
<padding><Insets top="25" right="25" bottom="10" left="25"/></padding>
<gridLinesVisible>true</gridLinesVisible>

<Text text="Welcome"
      GridPane.columnIndex="0" GridPane.rowIndex="0"
      GridPane.columnSpan="2"/>

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

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

<Label text="Password:"
      GridPane.columnIndex="0" GridPane.rowIndex="2"/>

<PasswordField fx:id="passwordField"
               GridPane.columnIndex="1" GridPane.rowIndex="2"/>

<HBox spacing="10" alignment="bottom_right"
      GridPane.columnIndex="1" GridPane.rowIndex="4">
    <Button text="Sign In"
            onAction="#handleSubmitButtonAction"/>
</HBox>

<Text fx:id="actiontarget"
      GridPane.columnIndex="1" GridPane.rowIndex="6"/>
</GridPane>
Run Code Online (Sandbox Code Playgroud)

FXMLExample.java

package local.hz;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class FXMLExample extends Application {
@Override
public void start(Stage stage) throws Exception {
    Parent root = FXMLLoader.load(getClass().getResource("fxml_example.fxml"));

    Scene scene = new Scene(root,300,275);

    stage.setTitle("FXML WELCOME!!");
    stage.setScene(scene);
    stage.show();
}

public static  void main(String[] arguments) {
    launch(arguments);
}
}
Run Code Online (Sandbox Code Playgroud)

小智 24

你的FXML文件可能没有打包到你的jar中.

尝试将此添加到build.gradle文件中:

sourceSets {
  main {
    resources {
        srcDirs = ["src/main/java"]
        includes = ["**/*.fxml"]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 这个答案是对的.该问题的作者可以接受它. (3认同)

小智 5

我参加聚会真的迟到了...但是接受的方法不起作用。我(随机)将“javafx.fxml”添加到模块列表中,如下所示

javafx {
    version = "14"
    modules = [ 'javafx.controls', 'javafx.fxml']
}
Run Code Online (Sandbox Code Playgroud)

...它解决了这个问题。


akh*_*khl -3

尝试更换:

javaRuntime = 'C:\\Program Files\\Java\\jdk1.7.0_45'
Run Code Online (Sandbox Code Playgroud)

和:

javaRuntime = 'C:/Program Files/Java/jdk1.7.0_45'
Run Code Online (Sandbox Code Playgroud)

  • 这些是相同的路径。 (2认同)