java.lang.module.invalidmoduledescriptorexception:luajc.class位于顶级目录中

lnvxswe2  于 2021-08-20  发布在  Java
关注(0)|答案(0)|浏览(263)

我必须将我的项目从swt转换为javafx。该项目大量使用luaj强制和执行lua脚本,并在swt中运行良好。
但是javafx有一个区别。javafx作为一个模块工作。
从那以后,我和luaj有了麻烦。
尝试了两种不同的方法:

在类路径中使用luaj

eclipse不再看到它(org.luaj.vm2.[…]类型不可访问)。试图玩弄秩序,但仍然不起作用。
使用luaj作为自动命名模块
我尝试作为用户库或直接作为外部jar。
在本例中,eclipse看到luaj包。但当我跑步时,我得到了信息
启动层初始化期间出错
java.lang.module.findexception:无法为e:\eclipse workspace\lib\luaj-3.0.1\lib\luaj-jse-3.0.1.jar派生模块描述符,原因是:java.lang.module.invalidmoduledescriptorexception:在顶级目录中找到luajc.class(模块中不允许使用未命名的包)
我认为lib文件的名称不正确。我收到一条警告:“automatic module luaj.jse的名称不稳定”,但当我尝试重命名它时,eclipse搜索旧文件名时出现了一个错误。
这可能是原因吗?
我使用jdk-16
这里是我的模块信息。。。

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;
}

虚拟机参数

--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>

谢谢你的帮助!我搜索了两天,我很困惑!
编辑似乎luaj不能作为模块工作。我仍然坚持让它在类路径中工作。。。
编辑2解决
我删除了模块信息,并在模块路径中添加了所有javafx库。
我将vm参数替换为

--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

注意,您必须在addmodules参数中选择要使用的javafx模块。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题