Использование классов из библиотеки JAR дает мне странную ошибку JNI - PullRequest
0 голосов
/ 28 февраля 2020

Это происходит только тогда, когда я использую файл JAR. У меня есть файл MouseTest.java и файл MazeRunnerAssets.jar в одном каталоге. У меня также есть .java файлы в другом каталоге, который я компилирую. Это моя команда, использующая javac:

javac -cp MazeRunnerAssets.jar Maze_DS/MouseTest.java ../src/Maze_DS/*.java

, когда я делаю java Maze_DS.MouseTest, я получаю:

Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: actor/Actor
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
    at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
    at java.lang.Class.getMethod0(Class.java:3018)
    at java.lang.Class.getMethod(Class.java:1784)
    at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)
Caused by: java.lang.ClassNotFoundException: actor.Actor
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 7 more

Если я удаляю код внутри MouseTest.java, то использует определенные классы внутри MazeRunnerAssets.jar, тогда он будет работать. И java, и javac имеют одинаковую версию. В чем может быть проблема?

Моя структура каталогов:

MazeRunner/
├── src/
│   ├── Maze_DS/
│       ├── other .java files...
├── test/
    ├── Maze_DS/
        ├── MouseTest.java
    ├── MazeRunnerAssets.jar

Каталог, из которого я запускаю команду: MazeRunner/test.

Он говорит, что может не найти Actor, который является одним из классов внутри файла .jar.

Внутри файла .jar есть список каталогов, содержащих файлы .class, файлы .png, файл манифеста , et c.:

MazeRunnerAssests.jar:
actor/
-------- Actor.class
asset/
grid/
gui/
META-INF/
world/
...