gpt4 book ai didi

java - 在 Eclipse 中使用 gradle 项目运行一个简单的 javafx 应用程序

转载 作者:行者123 更新时间:2023-12-01 17:44:50 32 4
gpt4 key购买 nike

我是 Eclipse java、Gradle 和 Javafx 的新手。最近我正在尝试使用 gradle 项目编写一个 javafx 应用程序。以下是我想提供的各种详细信息。

Javafx SDK version and location

Scene Builder version and location

我的问题也在这里引起,填充在 Eclipse 中实际上是如何工作的?我应该在哪里放置驱动程序类?在 src/main/java 下?

My Eclipse directory

这就是我格式化用户界面的方式。

ui.fxml:

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

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.AnchorPane?>


<AnchorPane xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8.0.171">
<children>
<Button fx:id="button1" layoutX="-317.0" layoutY="-145.0" mnemonicParsing="false" onAction="#buttonPressed" text="Hit me" />
<Label fx:id="label1" layoutX="66.0" layoutY="-98.0" text="hi" />
</children>
</AnchorPane>

构建.gradle

plugins {
id 'java'
id 'application'
id 'org.openjfx.javafxplugin' version '0.0.8'
}

repositories {
mavenCentral()
}

dependencies {
modules = [ 'javafx.controls', 'javafx.fxml' ]
version = "11.0.2"
}

mainClassName = 'Library'

我怀疑这里存在一些问题,因为当我运行gradle项目时,我无法运行它。我只能构建它。

Gradle error: Cannot set the value of read-only property 'modules' for object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.

Library.java:(驱动程序类)

public class Library {
public static void main(String arg[]) {
ex2.UIApplication.run(arg);
}
}

当我运行这个时,我遇到了很多错误。

VM argument: --module-path "C:\Users\andes\javafx-sdk-11.0.2\lib" --add-modules=javafx.controls,javafx.fxml

Error: Could not find or load main class Lab_3_1.Library

Lab3Controller.java:

package ex2;

import javafx.event.ActionEvent;

import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.Label;

public class Lab3Controller {

@FXML
private Button button1;

@FXML
private Label label1;

@FXML
void buttonPressed(ActionEvent event) {

}

}

UIApplication.java:

package ex2;

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

public class UIApplication extends Application{
@Override
public void start(Stage stage) throws Exception{
FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("/ui.fxml"));
VBox root = (VBox) loader.load();
Scene scene = new Scene(root);
stage.setScene(scene);
stage.setTitle("Lab 3");;
stage.show();
}

public static void run (String arg[]) {
Application.launch(arg);
}
}

最佳答案

问题是,您的 Mainclass 直接从应用程序扩展。

您需要通过一个不从应用程序扩展的类来启动它。

从这里开始。


public class AppLauncher {

public static void main(String[] args) {
Application.launch(UIApplication.class, args);
}
}

还有另一个提示。如果您想在没有“vm Arguments”的情况下运行应用程序,您应该考虑使用 module-info.java 来告诉您的应用程序要使用哪些模块。

或者您可以更新 gradle 配置,因为您已经使用了 Java fx 插件:


javafx {

version = "11"
modules = [ 'javafx.controls', 'javafx.fxml','javafx.graphics']
}

dependencies {

// your other dependecies



implementation 'org.openjfx:javafx:11'
compile group: 'org.openjfx', name: 'javafx', version: '11.0.2'



}


compileJava {
doFirst {
options.compilerArgs = [
'--module-path', classpath.asPath,
'--add-modules', 'javafx.controls,javafx.fxml,javafx.graphics'
]
println options.compilerArgs
}

}



关于java - 在 Eclipse 中使用 gradle 项目运行一个简单的 javafx 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60880589/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com