JavaFX和luaj在Eclipse中的问题 - java.lang.module.InvalidModuleDescriptorException: luajc.class在顶层目录中发现

我必须将我的项目从SWT转换为JavaFX。这个项目在SWT中使用luaj来执行lua脚本,效果很好。

但是在JavaFX中有一个区别。JavaFX作为一个模块而存在。

从那时起,我就和luaj有麻烦了。

尝试了两种不同的方法:

\*\* 将luaj放在classpath中**

Eclipse不再识别它(类型org.luaj.vm2.[...]不可访问)。 尝试调整顺序但仍无法工作。

\*\* 将luaj作为自动命名模块**

我尝试了作为用户库或直接作为外部jar文件。

在这种情况下,eclipse可以看到luaj程序包。 但是当我运行时,我会得到以下消息:

初始化启动层时发生错误

java.lang.module.FindException: Unable to derive module descriptor for E:\eclipse-workspace\Lib\luaj-3.0.1\lib\luaj-jse-3.0.1.jar Caused by: java.lang.module.InvalidModuleDescriptorException: luajc.class found in top-level directory (unnamed package not allowed in module)

我认为库文件的命名不正确。 我有一个警告说"名称自动模块luaj.jse不稳定",但当我尝试重命名它时,由于Eclipse搜索旧文件名而出现错误。

这可能是原因吗?

我使用jdk-16

以下是我的module-info...

module dusandbox {
    requires javafx.graphics;
    requires javafx.controls;
    requires javafx.base;
    requires javafx.fxml;
    requires javafx.media;
    requires javafx.swing;
    requires javafx.swt;
    requires javafx.web;
    requires java.xml;
    requires luaj.jse;

    exports dusandbox;
    exports dusandbox.setup;
    exports dusandbox.obj;
    opens dusandbox.setup to javafx.fxml;
    opens dusandbox.obj to javafx.fxml;
}

VM参数

--module-path "E:\eclipse-workspace\Lib\javafx-sdk-11.0.2\lib"
--add-opens javafx.graphics/com.sun.javafx.text=ALL-UNNAMED

.classpath

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="lib" path="E:/eclipse-workspace/Lib/luaj-3.0.1/lib/luaj-jse-3.0.1.jar">
        <attributes>
            <attribute name="module" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry excluding="fxml/|picture/|pictures/" kind="src" path="src">
        <attributes>
            <attribute name="module" value="true"/>
            <attribute name="add-exports" value="dusandbox/dusandbox.setup=dusandbox"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/JavaFx">
        <attributes>
            <attribute name="module" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
        <attributes>
            <attribute name="module" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="lib" path="E:/eclipse-workspace/Lib/javax.xml.bind.jar"/>
    <classpathentry kind="output" path="bin"/>
</classpath>

谢谢您的帮助!我已经搜索了2天,我很困惑!

编辑 看起来luaj无法作为模块工作。 我仍然被卡在在classpath中使它工作的问题上...

点赞
用户16377196
用户16377196

已解决

我移除了 module-info 并在 module-path 中添加了所有的 JavaFX 库。

我使用以下的 VM arguments 替换了原先的参数:

--module-path "E:\eclipse-workspace\Lib\javafx-sdk-11.0.2\lib"
--add-modules javafx.base,javafx.controls,javafx.fxml,javafx.graphics,javafx.media,javafx.web

请注意,在 add-modules 参数中,你必须选择要使用哪些 JavaFX 模块。

2021-07-17 13:20:48