JavaFX HelloWorld 程序只打开一个蓝色的 Java 文件夹,而不是 UI 窗口

Posted

技术标签:

【中文标题】JavaFX HelloWorld 程序只打开一个蓝色的 Java 文件夹,而不是 UI 窗口【英文标题】:JavaFX HelloWorld program only opens a blue Java folder, not UI window 【发布时间】:2021-10-28 21:45:58 【问题描述】:

关于***的第一个问题:

我使用的是 MacOS BigSur 11.5.2、2.3 GHz 双核 i5、8GB。我正在使用 Eclipse IDE for Java,v4.17。我已经从 gluonhq.com 下载并配置了 JavaFX SDK (v11.0.2)

我正在尝试运行一个基本的 JavaFX HelloWorld 程序(很常见,随处可见)。当我运行这个程序时,它所做的只是在我的桌面任务栏中打开一个蓝色的 Java 文件夹;它不会打开标题为“Hello World”的新 UI 窗口。

我已将 JavaFX SDK 外部库添加到项目的构建路径中。

我已经在 Run Config 的 vm 参数中指定了 JavafX SDK 的正确路径。

--module-path /Documents/javafx-sdk-11.0.2/lib --add-modules javafx.controls,javafx.fxml

我已确保在运行配置中识别出 javafx.controlsjavafx.fxml 模块依赖项(我假设所有必要的 requires transitive 模块都包含在此处)。


这是我的 Main.java

    package com.me.jfxapplication;
    
    import javafx.application.Application;
    import javafx.scene.Parent;
    import javafx.stage.Stage;
    import javafx.scene.Scene;
    import javafx.scene.layout.BorderPane;


public class Main extends Application 
    
    @Override
    public void start(Stage primaryStage) throws Exception 
        Parent root = javafx.fxml.FXMLLoader.load(getClass().getResource("Sample.fxml"));
        primaryStage.setTitle("Hello World");
        primaryStage.setScene(new Scene(root, 300, 275));
        primaryStage.show();
    
    
    public static void main(String[] args) 
        launch(args);
    

这是我的 Sample.fxml 文件

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

<?import javafx.scene.layout.GridPane?>

<GridPane fx:controller="com.cowsill.jfxapplication.Controller"
    xmlns:fx="javafx.com/fxml" alignment="center" hgap="10" vgap="10">
</GridPane>

这是我的 module-info.java

    module com.me.jfxapplication 
    exports com.me.jfxapplication;

    requires javafx.base;
    requires javafx.fxml;
    requires javafx.graphics;


我还尝试通过以下方式在命令行上运行它:

javac --module-path ~/Documents/javafx-sdk-11.0.2/lib/ --add-modules javafx.controls,javafx.fxml jfxapplication/Main.java

 java --module-path ~/Documents/javafx-sdk-11.0.2/lib/ --add-modules javafx.controls,javafx.fxml jfxapplication/Main.java

在搜索 Web 资源之后,似乎有很多关于 JFX 的模块依赖关系的重复问题。我经历了其他人遇到的每个问题实例,并反映了他们建议的每个错误修复。我的程序正在运行是吗?它只是不显示场景图/UI。

谢谢!

【问题讨论】:

你的命令看起来很奇怪。 (1) 您的源目录结构通常应该反映包结构,所以我希望Main 类位于com/me/jfxapplication/Main.java。然而,您似乎表明它位于jfxapplication/Main.java。 (2) 您似乎没有编译module-info.java 文件。 (3) 由于您的应用程序似乎有一个module-info.java 文件,因此您不需要使用--add-modules。您应该通过 --module &lt;main-module&gt;[/&lt;main-class&gt;] 选项将应用程序作为模块启动。 (4) 即使您的代码不是模块化的,您的java 命令仍然是错误的。最后,您应该传递完全限定的类名,而不是源文件。所以com.me.jfxapplication.Main,而不是jfxapplication/Main.java。不过,我不能保证这些问题与您的问题有关。 您是否按照这里的步骤进行操作 -> openjfx.io/openjfx-docs? 谢谢@slaw,(1 & 4)我实际上是从源目录内部编译和执行的,因此是缩写的类路径(我在编译和执行,无济于事)。 (2) 我不知道module-info.java 需要与Main 一起编译;我会在什么时候编译它? (3) 我尝试编译而不为这些 jar 声明 --add-modules,但它返回“错误:包 javafx.scene 不存在”和“...javafx.stage 不存在”。 谢谢@Sedrick,除了export PATH_TO_FX=path/to/javafx-sdk-15.0.1/lib...之外,我一直在逐字遵循openjfx.io指南...因为输入此命令时,它返回'export:PATH_TO_FX=path/to/ javafx-sdk-15.0.1/lib:不是一个有效的标识符'。我确保我的 path_to_fx 是准确的 【参考方案1】:

当使用 Eclipse IDE 时,点击 Run -> Run Configurations... -> Java Application -> your project -> Arguments。

确保未选中“使用 SWT 启动时使用 -XstartOnFirstThread 参数”复选框。

这应该可以解决问题。

【讨论】:

谢谢@roinki;这个 Eclipse 解决方案是我不久前尝试过的,它确实允许程序编译/运行,但是蓝色的 Java 文件夹仍然是所有呈现的,UI 窗口实际上并没有显示。因此,我觉得这与我的 Macbook 或 Apple 软件版本有关;我想我什么都试过了

以上是关于JavaFX HelloWorld 程序只打开一个蓝色的 Java 文件夹,而不是 UI 窗口的主要内容,如果未能解决你的问题,请参考以下文章

试图在intellij jre11上运行javafx程序[重复]

javafx动态地在新选项卡中打开一个新的fxml文件

JavaFX开发环境安装配置

javaFX制作helloWorld的几种方式

JavaFX 应用程序抛出 NullPointerExceptions 但仍然运行

Javafx只初始化一次控制器构造函数?