在 Sublime-Text 中添加构建系统,编译和 运行 JavaFX 代码

Adding build system in Sublime-Text, to Compile and Run JavaFX codes

我想 运行 java 包含 JavaFX 片段的代码,在 sublime-text 本身中。

我使用的是 JDK 13,因此 JavaFX 本身并未与 JDK 捆绑在一起。我下载了JavaFX文件并存储在E:\javafx-sdk-15.0.1,我还创建了一个系统环境变量PATH_TO_JAVAFX来存储"E:\javafx-sdk-15.0.1\lib",JavaFX模块所在的目录在场。

我试图在 Sublime-Text 3 中添加以下构建,但它不起作用。

    {
        "shell_cmd": "javac --module-path %PATH_TO_JAVAFX% --add-modules javafx.base,javafx.controls,javafx.fxml,javafx.graphics,javafx.media,javafx.swing,javafx.web \"${file}\"",
        "file_regex": "^(..[^:]):([0-9]+):?([0-9]+)?:? (.)$",
        "working_dir": "${file_path}",
        "selector": "source.java",
    
        "variants":
        [
            {
                "name": "Run",
                "shell_cmd": "javac --module-path %PATH_TO_JAVAFX% --add-modules javafx.base,javafx.controls,javafx.fxml,javafx.graphics,javafx.media,javafx.swing,javafx.web \"${file}\" && java --module-path %PATH_TO_JAVAFX% --add-modules javafx.base,javafx.controls,javafx.fxml,javafx.graphics,javafx.media,javafx.swing,javafx.web \"${file_path}/${file_base_name}\""
            }
        ]
    }

运行 cmd 本身的相同命令,实际值为 filefile_pathfile_base_name,运行顺利。检查时,我发现 %PATH_TO_JavaFX% 没有按照我的预期进行,它没有扩展到我设置的实际路径。

PATH_TO_JAVAFX的实际值尝试相同的构建,正常编译就可以了,但是运行的版本还是不行。我收到以下错误:

Error: Could not find or load main class D:\Codes\JAVA\HelloWorld_JavaFX.HelloWorld_JavaFX Caused by: java.lang.ClassNotFoundException: D:\Codes\JAVA\HelloWorld_JavaFX.HelloWorld_JavaFX

这是我正在尝试的代码 运行(taken from),

    import javafx.application.Application;
    import javafx.scene.Scene;
    import javafx.scene.control.Label;
    import javafx.scene.layout.StackPane;
    import javafx.stage.Stage;
    
    public class HelloWorld_JavaFX extends Application {
    
        @Override
        public void start(Stage stage) {
            String javaVersion = System.getProperty("java.version");
            String javafxVersion = System.getProperty("javafx.version");
            Label l = new Label("Hello, JavaFX " + javafxVersion + ", running on Java " + javaVersion + ".");
            Scene scene = new Scene(new StackPane(l), 640, 480);
            stage.setScene(scene);
            stage.show();
        }
    
        public static void main(String[] args) {
            launch();
        }
    
    }

具体问题出在哪里,如何解决?另外有没有办法,我可以使用PATH_TO_JAVAFX,而不是写完整的路径?

注意:我正在使用 Windows。

我建议使用 Gradle 之类的构建工具,并在 build.gradle 文件中使用 javafx Gradle 插件。拥有 SublimeText 运行 gradle 构建。 Sublime Text 也有 Gradle 插件。你也可以使用 Maven,虽然我觉得它更麻烦。

我认为是 Sublime-Text 的问题,结果证明只是 Java 问题,如果我考虑过这个问题,只需几次 Google 搜索就可以很快解决。

因此,多亏了这个 Whosebug thread 的一些启发,并且主要是点击和试用,我能够仅在 Sublime Text 中成功构建,而无需添加任何插件或修改 Sublime Text。

这是我的构建文件现在的样子


    {
        "shell_cmd": "javac --module-path %PATH_TO_JAVAFX% --add-modules javafx.base,javafx.controls,javafx.fxml,javafx.graphics,javafx.media,javafx.swing,javafx.web \"${file}\" && java -cp \"${file_path}\" --module-path %PATH_TO_JAVAFX% --add-modules javafx.base,javafx.controls,javafx.fxml,javafx.graphics,javafx.media,javafx.swing,javafx.web \"${file_base_name}\"",
        "file_regex": "^(..[^:]):([0-9]+):?([0-9]+)?:? (.)$",
        "working_dir": "${file_path}",
        "selector": "source.java",
    
        "variants":
        [
            {
                "name": "Compile",
                "shell_cmd": "javac --module-path %PATH_TO_JAVAFX% --add-modules javafx.base,javafx.controls,javafx.fxml,javafx.graphics,javafx.media,javafx.swing,javafx.web \"${file}\""
            },
            {
                "name": "Run",
                "shell_cmd": "java -cp \"${file_path}\" --module-path %PATH_TO_JAVAFX% --add-modules javafx.base,javafx.controls,javafx.fxml,javafx.graphics,javafx.media,javafx.swing,javafx.web \"${file_base_name}\""
            }
        ]
    }

仍然找不到让环境变量工作的简单方法,所以必须添加完整的路径来代替 %PATH_TO_JAVAFX%