当前位置: 首页 > 知识库问答 >
问题:

如何解决'导入javafx无法解决'在VSCode?

吴浩皛
2023-03-14

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

但是,VSCode找不到JavaFX,并表示导入javafx无法解析。所以我想知道VSCode如何找到Java依赖关系?他怎么能像蚂蚁一样找到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"/>

共有1个答案

伯彦君
2023-03-14

VSCode有一个蚂蚁扩展,名为蚂蚁目标跑步者。

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

我可以稍微修改上面的构建,以便添加一个run目标,并从这里运行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>

每次你修改文件并保存它,蚂蚁目标面板会被重新加载,目标会显示出来:

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

确保选择了JDK 11(我已经向clean目标添加了一个echo)。如果不是这样,您可以直接从同一个终端进行设置(export JAVA\u HOME=…)。

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

请注意,虽然这样做很好,但使用Maven或Gradle等构建工具会更方便。

让IDE使用JavaFX库

默认情况下,您将收到一条警告消息Classpath是不完整的,并且JavaFX类没有自动完成。

由于VSCode需要一个Mavenpom.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。

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

 类似资料:
  • 我正在使用Windows 10 64位和eclipse java 2019-06。我已经安装了和。我已经在环境变量中设置环境系统路径为。我可以在windows命令提示符中轻松编译和运行文件。我不能导入。 我使用了(在下图中)。我还尝试添加了进入外部库(下图中的)。 在此处输入图像描述

  • 问题内容: 我看了很多类似的问题,但解决方案并没有帮助我:( 这是我的openjfx库 这是JFX文档 我可以通过两种方式导入库: 1.在Java构建路径中,我可以以 这种方式使用所有类,而不会出现任何问题……但是我无法加载Java文档或 源代码,如果这样做,它将无法正常工作。 要么… 2.编辑已安装的JRE定义 这种方式使我像其他问题中所解释的那样在已 安装的jre中添加jfxrt.jar,并为

  • 我对Android应用程序非常陌生,我边走边学习。所以,如果你给出答案,请具体说明。 我使用eclipse Juno ADT构建了一个简单的Android测试应用程序。它工作得很好!所以下一步是添加对WordNik API的调用。 我安装了WordNik Java API,该API安装了以下库: 目标 目标 目标 目标 我通过Project将库添加到构建路径 现在,当将导入添加到我的代码时: I

  • 我在Eclipse中得到以下两个导入的错误: 错误是:“无法解决导入javafx.scene.control.警报”,第二个导入语句也是如此。 我使用的是Eclipse版本:Luna Service Release 2(4.4.2),并安装了带有最新JDK 1.8(1.8.0_45)的e(fx)clipse。 其他与javafx相关的导入语句没有问题,例如

  • 我收到了一个要修改的java项目,所以我决定在我的MacBook中设置它。我将项目加载到Eclipse(Luna)中,导入并添加了所有必要的外部罐子,并试图复制旧的设置。 现在,根据这一点(可能适用,也可能不适用),因为它是NetBeans(不确定是否有很大的区别),我应该使用< code > org . Apache . commons . lang 3 . stringescapeutils;

  • 我在WEB-INF内的lib文件夹和Tomcat lib中添加了许多jar,试图解决这个问题,但没有结果(commons-beanutils-1.8.1、commons-collections-3.2.1、commons-lang-2.5、commons-logging-1.1.1、ezmorph-1.0.6、java-json、javax.json-1.0、json-lib-2.4-jdk15、