如何将javafx安装到Eclipse

如何将javafx安装到Eclipse,eclipse,javafx,installation,Eclipse,Javafx,Installation,首先,我是Eclipse和Java的新手。 所以,我的问题是,我无法将javafx安装到我的Eclipse中。 我安装的: (Windows x64安装程序) (下载按钮) 我已经尝试过的: 关于如何安装Maven和javafx,我遵循了以下指南: 对于POM.xml文件,我使用了以下链接中的代码: 现在,在创建了一个新的Maven项目并尝试导入(例如javafx.scene.shape.Rectangle)之后,我遇到了以下错误: (导入jfxrt.jar后) 错误:缺少JavaFX运行时组

首先,我是Eclipse和Java的新手。 所以,我的问题是,我无法将javafx安装到我的Eclipse中。 我安装的: (Windows x64安装程序) (下载按钮)

我已经尝试过的: 关于如何安装Maven和javafx,我遵循了以下指南: 对于POM.xml文件,我使用了以下链接中的代码:

现在,在创建了一个新的Maven项目并尝试导入(例如javafx.scene.shape.Rectangle)之后,我遇到了以下错误: (导入jfxrt.jar后) 错误:缺少JavaFX运行时组件,运行此应用程序需要这些组件

我想运行的示例代码来自我的朋友:

    package vierGewinnt;

import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class Game extends Application{

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

    public void start(Stage primaryStage){
        Field field = new Field();

        Button newGame = new Button("Neues Spiel");
        PositionColumn pos = new PositionColumn();



        VBox root = new VBox();
        root.getChildren().addAll(field, pos, newGame);
        Scene scene = new Scene(root);
        scene.addEventHandler(KeyEvent.KEY_RELEASED, new EventHandler<KeyEvent>(){
            @Override
            public void handle(KeyEvent event) {
                /*if(field.victory()){
                    Stage secondaryStage = new Stage();
                    HBox viBox = new HBox();
                    Scene viScene = new Scene(viBox);
                    secondaryStage.setScene(viScene);
                    secondaryStage.show();
                }*/
                if (event instanceof KeyEvent)
                    field.setStone(event);
            }
        });

        primaryStage.setScene(scene);
        primaryStage.show();
    }
}
package-viergewint;
导入javafx.application.application;
导入javafx.event.EventHandler;
导入javafx.scene.scene;
导入javafx.scene.control.Button;
导入javafx.scene.input.KeyEvent;
导入javafx.scene.layout.VBox;
导入javafx.stage.stage;
公共类游戏扩展应用{
公共静态void main(字符串[]args){
发射(args);
}
公共无效开始(阶段primaryStage){
字段=新字段();
按钮新游戏=新按钮(“Neues Spiel”);
PositionColumn位置=新的PositionColumn();
VBox root=新的VBox();
root.getChildren().addAll(字段、位置、新游戏);
场景=新场景(根);
scene.addEventHandler(KeyEvent.KEY_已发布,新的EventHandler(){
@凌驾
公共无效句柄(KeyEvent事件){
/*if(field.victory()){
第二阶段阶段=新阶段();
HBox viBox=新的HBox();
场景viScene=新场景(viBox);
第二阶段:固新统(粘新统);
secondaryStage.show();
}*/
if(KeyEvent的事件实例)
字段设置音(事件);
}
});
初级阶段。场景(场景);
primaryStage.show();
}
}
(还有其他课程可以让它发挥作用,这不是问题所在)


因此,在这一点上,我不知道下一步要做什么,或者如何让javafx以不同的方式工作

您使用的是不再包含javafx的JDK版本13。因此,您需要手动将JavaFX添加到您的项目中

这很容易,因为您使用的是Maven项目。因此,您需要做的就是:

  • 打开项目的
    pom.xml
    文件(在项目的顶级目录中)
  • 将javafx依赖项添加到maven依赖项中
  • (可能)为eclipse刷新maven项目(Alt+F5)以注意更改
要将maven依赖项添加到项目中,只需将其添加到
pom.xml
文件中(位于标记
之间):


org.openjfx
javafx
11
聚甲醛

编辑

要回答有关启动应用程序时发生的异常的第二个问题,请执行以下操作:

StackTrace说:

原因:java.lang.IllegalAccessException:类 com.sun.javafx.application.launchempl(在模块javafx.graphics中) 无法访问vierGewinnt.Game类(在模块中 org.openjfx.archetype_simple)因为模块 org.openjfx.archetype_simple不将viergewint导出到模块 javafx.graphics


因此,问题是无法创建Viergewint.Game类,因为它无法访问。这是因为它没有导出。如果添加导出,它应该可以工作。

当我从@Tobias添加依赖项时,我得到了以下错误:

应用程序构造函数中的异常 线程“main”java.lang.reflect.InvocationTargetException中出现异常 位于java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(本机方法) 位于java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 位于java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 位于java.base/java.lang.reflect.Method.invoke(Method.java:567) 位于java.base/sun.launcher.launchelper$FXHelper.main(launchelper.java:1051) 原因:java.lang.RuntimeException:无法构造应用程序实例:类vierGewinnt.Game 位于javafx.graphics/com.sun.javafx.application.LaunchImpl.launchApplication1(LaunchImpl.java:890) 在javafx.graphics/com.sun.javafx.application.LaunchImpl.lambda$launchApplication$2(LaunchImpl.java:195) 位于java.base/java.lang.Thread.run(Thread.java:830) 原因:java.lang.IllegalAccessException:class com.sun.javafx.application.launchempl(在模块javafx.graphics中)无法访问类viergewint.Game(在模块org.openjfx.archetype_simple中),因为模块org.openjfx.archetype_simple没有将viergewint导出到模块javafx.graphics 位于java.base/jdk.internal.reflect.Reflection.newIllegalAccessException(Reflection.java:376) 位于java.base/java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:642) 位于java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:490) 位于java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481) 在javafx.graphics/com.sun.javafx.application.launchempl.lambda$launchApplication1$8(launchempl.java:802) 在javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:455) 在javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428) 位于java.base/java.security.AccessController.doPrivileged(AccessController.java:391) 位于javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427) 位于javafx.graphics/com.sun.glass.ui.invokelateDispatcher$Future.run(invokelateDispatcher.java:96) 在javafx.graphics/com.sun.glass.ui.win.WinApplication.\u runLoop(本机方法) 在javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinA
<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx</artifactId>
    <version>11</version>
    <type>pom</type>
</dependency>
package org.openjfx.archetype_simple;

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

import java.io.IOException;

/**
 * JavaFX App
 */
public class App extends Application {

private static Scene scene;

@Override
public void start(Stage stage) throws IOException {
    scene = new Scene(loadFXML("primary"), 640, 480);
    stage.setScene(scene);
    stage.show();
}

static void setRoot(String fxml) throws IOException {
    scene.setRoot(loadFXML(fxml));
}

private static Parent loadFXML(String fxml) throws IOException {
    FXMLLoader fxmlLoader = new FXMLLoader(App.class.getResource(fxml + ".fxml"));
    return fxmlLoader.load();
}

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

}