gpt4 book ai didi

java - 如何在VSCode中解析 'import javafx cannot be resolved'?

转载 作者:行者123 更新时间:2023-12-02 04:33:46 25 4
gpt4 key购买 nike

我正在开发一个简单的JavaFX程序,HelloFX。我使用 ant 执行构建或启动等任务。我对此没有任何问题,它工作得很好,因此代码和库在 build.xml 中很好地链接,正如您在代码中看到的那样。

但是,VSCode 找不到 JavaFX,并显示“无法解析 import javafx”。所以我想知道VSCode如何找到Java依赖项?他怎么能像 ant 那样找到 JavaFX 呢?我认为 VSCode 使用 build.xml 来查找依赖项,所以,也许我错了,或者也许我的 build.xml 不好。

预先感谢您的帮助!

<project name="HelloFX" basedir="." default="rebuild-run">



<property name="src.dir" value="src"/>
<property name="lib.dir" value="/home/rafael/javafx-sdk-12.0.1/lib"/>
<path id="classpath">
<fileset dir="${lib.dir}" includes="**/*.jar"/>
</path>

<property name="build.dir" value="bin"/>
<property name="classes.dir" value="${build.dir}/classes"/>
<property name="jar.dir" value="${build.dir}/jar"/>

<property name="main-class" value="${ant.project.name}"/>


<target name="clean">
<delete dir="${build.dir}"/>
</target>

<target name="compile">
<mkdir dir="${classes.dir}"/>
<javac includeantruntime="false" srcdir="${src.dir}" destdir="${classes.dir}" classpathref="classpath" modulepath="/home/rafael/javafx-sdk-12.0.1/lib">
<compilerarg line="--add-modules javafx.controls"/>
</javac>
</target>

<target name="jar" depends="compile">
<mkdir dir="${jar.dir}"/>
<jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}">
<manifest>
<attribute name="Main-Class" value="${main-class}"/>
</manifest>
</jar>
</target>

<target name="run" depends="jar">
<java fork="true" classname="${main-class}" modulepath="/home/rafael/javafx-sdk-12.0.1/lib" >
<jvmarg line="--add-modules javafx.controls"/>
<sysproperty key="java.library.path" path="$(lib.dir)"/>
<classpath>
<path refid="classpath"/>
<path location="${jar.dir}/${ant.project.name}.jar"/>
</classpath>
</java>
</target>

<target name="rebuild" depends="clean,jar"/>

<target name="rebuild-run" depends="clean,run"/>

最佳答案

VSCode 有一个 Ant 扩展,名为 Ant Target Runner .

安装后,您可以打开根目录下包含 build.xml 文件的 JavaFX 项目。

我能够对上面的构建进行一些修改,以便添加 run 目标,并从 here 运行 HelloFX .

<?xml version="1.0" encoding="UTF-8"?>
<project name="HelloFX" default="default" basedir="." xmlns:fx="javafx:com.sun.javafx.tools.ant">

<property name="src.dir" value="src"/>
<property name="lib.dir" value="/Users/user/Downloads/javafx-sdk-12.0.1/lib"/>
<path id="classpath">
<fileset dir="${lib.dir}" includes="**/*.jar"/>
</path>

<property name="build.dir" value="bin"/>
<property name="classes.dir" value="${build.dir}/classes"/>
<property name="jar.dir" value="${build.dir}/jar"/>

<property name="main-class" value="hellofx.Main"/>

<property environment="env"/>
<target name="clean">
<!-- Verify that JDK is 11+ -->
<echo message="JAVA_HOME is set to = ${env.JAVA_HOME}" />
<delete dir="${build.dir}"/>
</target>

<target name="compile">
<mkdir dir="${classes.dir}"/>
<javac includeantruntime="false" srcdir="${src.dir}" destdir="${classes.dir}" classpathref="classpath" modulepath="/Users/user/Downloads/javafx-sdk-12.0.1/lib">
<compilerarg line="--add-modules javafx.controls,javafx.fxml"/>
</javac>
<copy todir="${classes.dir}">
<fileset dir="src"
includes="**/*.fxml,**/*.properties,**/*.css" />
</copy>
</target>

<target name="run" depends="jar">
<java fork="true" modulepath="/Users/user/Downloads/javafx-sdk-12.0.1/lib" jar="${jar.dir}/${ant.project.name}.jar">
<jvmarg line="--add-modules javafx.controls,javafx.fxml"/>
</java>
</target>

<target name="jar" depends="compile">
<mkdir dir="${jar.dir}"/>
<jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}">
<manifest>
<attribute name="Main-Class" value="${main-class}"/>
</manifest>
</jar>
</target>
</project>

每次修改文件并保存时,ant 目标面板都会重新加载并显示目标:

VSCode with Ant

如果您运行任何目标,输出将显示在终端中。

确保您选择了 JDK 11+(我已向 clean 目标添加了回显)。如果不是这种情况,您可以直接从同一终端进行设置 (export JAVA_HOME=...)。

然后您可以运行 run 目标并使应用程序正常运行:

Running Ant from VSCode

请注意,虽然这工作正常,但使用 Maven 或 Gradle 等构建工具会更方便。

让 IDE 使用 JavaFX 库

默认情况下,您将收到一条警告消息 Classpath is incomplete ,并且 JavaFX 类没有自动完成功能。

由于 VSCode 需要 Maven pom.xml 或 Eclipse .classpath 文件,因此我将添加后者:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" output="bin/classes" path="src/">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="false"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/Users/user/Downloads/javafx-sdk-12.0.1/lib/javafx.base.jar"/>
<classpathentry kind="lib" path="/Users/user/Downloads/javafx-sdk-12.0.1/lib/javafx.graphics.jar"/>
<classpathentry kind="lib" path="/Users/user/Downloads/javafx-sdk-12.0.1/lib/javafx.controls.jar"/>
<classpathentry kind="lib" path="/Users/user/Downloads/javafx-sdk-12.0.1/lib/javafx.fxml.jar"/>

<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-12">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
</classpath>

这似乎解决了 JavaFX 语法和自动完成的问题。请注意,这可能需要安装 Eclipse。

JavaFX syntax

最后,您可以添加与 here 中相同的 launcher.json ,这样您就可以直接运行应用程序,无需 ant 任务(尽管我认为这不是您的目标)。

关于java - 如何在VSCode中解析 'import javafx cannot be resolved'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56561102/

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