Java URLClassLoader ClassNotFoundException
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/29680032/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Java URLClassLoader ClassNotFoundException
提问by Pepijn Compaan
I have to write a .jar class loader
in an assignment for school. I've found this code in another question but can't figure out why it wont work.
我必须.jar class loader
在学校的作业中写一个。我在另一个问题中找到了这段代码,但不知道为什么它不起作用。
I've set the path to be an absolute path to make sure it references to the right file.
我已将路径设置为绝对路径,以确保它引用正确的文件。
System.out.println("Loading game: " + name);
URL url = new URL("file:///home/<name>/Documents/School/thema2.3/batavus/batavus/gamemodules/TicTacToe.jar");
ClassLoader loader = new URLClassLoader(new URL[]{url});
Class<?> clazz = loader.loadClass("spatboard.game." + name);
Class<? extends Game> boardClass = clazz.asSubclass(Game.class);
Constructor<? extends Game> ctor = boardClass.getConstructor();
return ctor.newInstance(board);
The error I get is:
我得到的错误是:
Loading game: TicTacToe
java.lang.ClassNotFoundException: spatboard.game.TicTacToe
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at spatbord.loader.GameLoader.loadModule(GameLoader.java:29)
at spatbord.model.Board.<init>(Board.java:51)
at spatbord.controller.GameController.onMatchStarted(GameController.java:157)
at spatbord.connection.Server.matchStarted(Server.java:428)
at spatbord.connection.Server.handleInput(Server.java:346)
at spatbord.connection.Server.run(Server.java:145)
at java.lang.Thread.run(Thread.java:745)
The package declaration in the TicTacToe
is package spatbord.game;
中的包声明TicTacToe
是package spatbord.game;
The contents of the jar are:
罐子的内容是:
spatbord
-> game
-> TicTacToe.class
What am I not seeing here?
我在这里看不到什么?
回答by Sri777
Please Use URLClassLoader instead of ClassLoader in 3rd line of code.
请在第三行代码中使用 URLClassLoader 而不是 ClassLoader。
URLClassLoader loader = new URLClassLoader(new URL[]{url});
Let me know this worked or not.
让我知道这是否有效。
回答by ryekayo
Look at this stacktrace:
看看这个堆栈跟踪:
Loading game: TicTacToe
java.lang.ClassNotFoundException: spatboard.game.TicTacToe
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at spatbord.loader.GameLoader.loadModule(GameLoader.java:29)
at spatbord.model.Board.<init>(Board.java:51)
at spatbord.controller.GameController.onMatchStarted(GameController.java:157)
at spatbord.connection.Server.matchStarted(Server.java:428)
at spatbord.connection.Server.handleInput(Server.java:346)
at spatbord.connection.Server.run(Server.java:145)
at java.lang.Thread.run(Thread.java:745)
and the contents:
和内容:
spatbord
-> game
-> TicTacToe.class
Specifically at this line:
具体在这一行:
java.lang.ClassNotFoundException: spatboard.game.TicTacToe
java.lang.ClassNotFoundException: spatboard.game.TicTacToe
the JRE is expecting spatbord.game.TicTacToe
, so this means you mispelled your package spatboard
spatbord
.
JRE 正在spatbord.game.TicTacToe
等待,所以这意味着您拼错了您的包spatboard
spatbord
。