JavaFX-11 with VSCode

前端 未结 2 949
囚心锁ツ
囚心锁ツ 2020-11-27 20:35

I must be missing something obvious here... I am experimenting with VSCode (coming from Eclipse), but I am unable to get VSCode to see the JavaFX11 libraries. In the import

相关标签:
2条回答
  • 2020-11-27 21:07

    I think I've found a simpler answer!

    1. Start the executable that installs your JDK e.g.: jdk-8u201-windows-x64
    2. Reinstall and choose to have the extra features including JavaFX installed locally.

    Once the installer was done Visual Studio was able to see the files and access was no longer restricted.

    If this doesn't work, I did two other things before while I was trouble-shooting (neither of these solved the problem, but one of them could've affected the result of reinstalling the JDK):

    1. I appended a slash to the end of path to the JDK e.g.: "C:\Program Files\Java\jdk1.8.0_201\"

      1. Before reinstalling the JDK I connected eclipse to it and added a non-restricted access rule
    0 讨论(0)
  • 2020-11-27 21:19

    I'm going to run the HelloFX sample for Eclipse from the OpenJFX samples.

    After I open the sample with VSCode, I see the reported error: [Java] The import javafx cannot be resolved [268435846].

    This obviously means that JavaFX classes are not resolved, and even if there is an entry in the .classpath file:

    <classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/JavaFX11"/>
    

    this library can't be resolved.

    Solving JavaFX SDK

    So I'm going to replace that variable with the actual jars from my local JavaFX SDK:

    <classpathentry kind="lib" path="/Users/<user>/Downloads/javafx-sdk-11.0.2/lib/javafx.base.jar"/>
    <classpathentry kind="lib" path="/Users/<user>/Downloads/javafx-sdk-11.0.2/lib/javafx.graphics.jar"/>
    <classpathentry kind="lib" path="/Users/<user>/Downloads/javafx-sdk-11.0.2/lib/javafx.controls.jar"/>
    <classpathentry kind="lib" path="/Users/<user>/Downloads/javafx-sdk-11.0.2/lib/javafx.fxml.jar"/>
    

    After refreshing the project, I can see under JAVA DEPENDENCIES these jars.

    While the error seems solved, the project still fails to build.

    Solving JRE

    We need to set JDK 11 for the project, so download it from here. Then open Eclipse and add it to the installed JREs. I see under Java -> Installed JREs -> Execution Environments that the name for the 11 version is JavaSE-11.

    The .classpath file from the helloFX project also contains a reference to the JRE:

    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/
        org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JDK11">
        <attributes>
            <attribute name="module" value="true"/>
        </attributes>
    </classpathentry>
    

    so I'm going to replace JDK11 with JavaSE-11, and refresh the project. I can see under JAVA DEPENDENCIES that there is a reference to JRE System Library [JavaSE-11].

    Solving JAVA_HOME

    We need to set the java.home in VSCode.

    This can be done in the settings.json from `Preferences->Settings->Workspace Settings:

    {
       "java.dependency.packagePresentation": "hierarchical",
       "java.home":"/Users/<user>/Downloads/jdk-11.0.2.jdk/Contents/Home"
    }
    

    After modifying it, you'll get a popup with the message Java Language Server configuration changed, please restart VS Code., so restart it.

    Trying it out

    We can see that there are no errors, there is even a bin folder with the result of the build that automatically VSCode does.

    Can we run it? If we try it out, we'll get an error:

    Error: JavaFX runtime components are missing, and are required to run this application
    

    This is the error you get when using JavaFX 11 without specifying the module-path.

    Solving VM arguments

    The final step consist on adding the required vm arguments.

    This can be done in the launch.json file. It contains a default configuration, that we can modify adding a new entry for the vmArgs including the --module-path with the local path to the JavaFX SDK and --add-modules with the required JavaFX modules:

    {
        "configurations": [
            {
                "type": "java",
                "name": "CodeLens (Launch) - Main",
                "request": "launch",
                "vmArgs": "--module-path /Users/<user>/Downloads/javafx-sdk-11.0.2/lib
                    --add-modules javafx.controls,javafx.fxml",
                "mainClass": "hellofx.Main",
                "projectName": "hellofx"
            }
        ]
    }
    

    Now we have everything set.

    Run the project again and it should work.

    Note that I'm a first time user of VSCode, so I may have missed something obvious, and maybe some of these steps could be avoided or simplified.

    0 讨论(0)
提交回复
热议问题