Maven + Java SDK 11 + Java FX: JavaFXランタイム・コンポーネントが不足しており、このアプリケーションの実行に必要です

投稿者: Anonymous

簡易なアプリです。最新技術を使っている、Java 11 + Java FX + Maven + Spring の「Hello, world」アプリです。

package com.example;

import com.example.beans.TestSpringBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.control.Label;


public class EntryPoint extends javafx.application.Application {

  public static void main (String[] args) {
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("ApplicationContext.xml");
    TestSpringBean testSpringBean = (TestSpringBean) applicationContext.getBean("testSpringBean");
    System.out.println(testSpringBean.getTestString());
    launch();
  }

  @Override
  public void start(Stage stage) {
    Label label = new Label("Hello, JavaFX11!");
    Scene scene = new Scene(label, 640, 480);
    stage.setScene(scene);
    stage.show();
  }
}

IntelIJ IDEAには、mavenのcompileをしてみると、特に問題ありません:

画像の説明をここに入力

maven-packageも、正常です。ですが構成されたファイルを実行してみると、「JavaFXランタイム・コンポーネントが不足しており、このアプリケーションの実行に必要です」というエラーが出ます:

画像の説明をここに入力

POM.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example</groupId>
  <artifactId>OTCJA</artifactId>
  <version>1.0-SNAPSHOT</version>

  <dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.1.0.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.openjfx</groupId>
      <artifactId>javafx-controls</artifactId>
      <version>11</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.7.0</version>
        <configuration>
          <release>11</release>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.6.0</version>
        <executions>
          <execution>
            <goals>
              <goal>java</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <mainClass>com.example.EntryPoint</mainClass>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <executions>
          <execution>
            <id>copy-dependencies</id>
            <phase>prepare-package</phase>
            <goals>
              <goal>copy-dependencies</goal>
            </goals>
            <configuration>
              <outputDirectory>
                ${project.build.directory}/libs
              </outputDirectory>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <configuration>
          <archive>
            <manifest>
              <addClasspath>true</addClasspath>
              <classpathPrefix>libs/</classpathPrefix>
              <mainClass>com.example.EntryPoint</mainClass>
            </manifest>
          </archive>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

環境

  • OS: Windows 10
  • IntelIJ IDEA バージョン:2018.2
  • ベンター:確か、http://jdk.java.netです

画像の説明をここに入力

解決

実行の際にここに記載されているオプション(以下)を指定していないことが原因だと思います。

--module-path $PATH_TO_FX --add-modules=javafx.controls

Run > Edit Configurations > JAR Applications > (作成したJar) を選択し、「VM Options」に上記を入力して実行すれば、おそらく動くと思います(試していませんが…)。$PATH_TO_FXjavafx-sdk-11/libへのパスです。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *