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

问题描述

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

我正在使用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.web \"${file}\" && java --module-path %PATH_TO_JAVAFX% --add-modules javafx.base,javafx.web \"${file_path}/${file_base_name}\""
            }
        ]
    }

在cmd本身中以实际值filefile_pathfile_base_name运行同一命令,可以顺利进行。经过检查,我发现%PATH_TO_JavaFX%并未达到我的预期,它没有扩展到我设置的实际路径。

尝试使用实际值为PATH_TO_JAVAFX的同一内部版本可以正常进行编译,但是运行版本仍然无法正常工作。我收到以下错误

错误:找不到或加载主类 D:\ Codes \ JAVA \ HelloWorld_JavaFX.HelloWorld_JavaFX由以下原因引起: 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搜索快速解决。

因此,由于对此Stackoverflow 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.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.web \"${file}\""
            },{
                "name": "Run","shell_cmd": "java -cp \"${file_path}\" --module-path %PATH_TO_JAVAFX% --add-modules javafx.base,javafx.web \"${file_base_name}\""
            }
        ]
    }

仍然找不到使环境变量正常工作的简便方法,因此必须添加完整的路径来代替%PATH_TO_JAVAFX%