Это происходит только тогда, когда я использую файл 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/