java - Java Game Development with Libgdx Book Chapter 3 ClassNotFoundException
问题描述
我看到有人问过这个问题,但那是两年多前的事了,他们从来没有得到答案。我正在尝试使用 LibGDX 运行 Java Game Development 一书中的示例程序,但我遇到了一个奇怪的错误。这是错误:
java.lang.ClassNotFoundException: Rock
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:606)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:168)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:377)
at com.mygdx.game.BaseActor.getList(BaseActor.java:319)
at com.mygdx.game.StarfishCollector.update(StarfishCollector.java:35)
at com.mygdx.game.GameBeta.render(GameBeta.java:24)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:232)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:127)
Exception in thread "LWJGL Application" java.lang.NullPointerException: Cannot invoke "java.lang.Class.isInstance(Object)" because "theClass" is null
at com.mygdx.game.BaseActor.getList(BaseActor.java:326)
at com.mygdx.game.StarfishCollector.update(StarfishCollector.java:35)
at com.mygdx.game.GameBeta.render(GameBeta.java:24)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:232)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:127)
11:45:50 PM: Task execution finished 'DesktopLauncher.main()'.
我正在使用 intelliJ,可以找到源代码: https ://github.com/Apress/java-game-dev-LibGDX/blob/master/Ch03%20Starfish%20Collector/BaseActor.java和https://github .com/Apress/java-game-dev-LibGDX/blob/master/Ch03%20Starfish%20Collector/StarfishCollector.java
该方法的代码是:
public static ArrayList<BaseActor> getList(Stage stage, String className)
{
ArrayList<BaseActor> list = new ArrayList<BaseActor>();
Class theClass = null;
try
{ theClass = Class.forName(className); }
catch (Exception error)
{ error.printStackTrace(); }
for (Actor a : stage.getActors())
{
if ( theClass.isInstance( a ) )
list.add( (BaseActor)a );
}
return list;
}
和
new Starfish(400,400, mainStage);
new Starfish(500,100, mainStage);
new Starfish(100,450, mainStage);
new Starfish(200,250, mainStage);
new Rock(200,150, mainStage);
new Rock(100,300, mainStage);
new Rock(300,350, mainStage);
new Rock(450,200, mainStage);
turtle = new Turtle(20,20, mainStage);
win = false;
}
public void update(float dt)
{
for (BaseActor rockActor : BaseActor.getList(mainStage, "Rock"))
turtle.preventOverlap(rockActor);
for (BaseActor starfishActor : BaseActor.getList(mainStage, "Starfish"))
{
Starfish starfish = (Starfish)starfishActor;
if ( turtle.overlaps(starfish) && !starfish.collected )
{
starfish.collected = true;
starfish.clearActions();
starfish.addAction( Actions.fadeOut(1) );
starfish.addAction( Actions.after( Actions.removeActor() ) );
Whirlpool whirl = new Whirlpool(0,0, mainStage);
whirl.centerAtActor( starfish );
whirl.setOpacity(0.25f);
}
}
好像找不到类名 rock,所以 class 变量保持为空并导致错误。我希望有人有一个解决方案,否则它是一本很棒的书。
谢谢
解决方案
这对我有用,您必须包含包而不仅仅是类名
theClass = Class.forName("com.mygdx.game." + className);
推荐阅读
- java - 在横向模式下无法隐藏导航栏
- django - Django创建嵌套模型
- postgresql - 无法在postgres中使用spring数据jdbc保存实体
- php - 当通过 PHP 动态提供 CSS 时,为什么我会在 Edge 中遇到内容类型兼容性问题?
- java - 如何更新片段中的 recyclerview 列表?(notifyDataSetChanged 不起作用)
- python - Python matplotlib 每个级别都有不同的颜色
- apache - Here-api Autosuggest 通过服务器代理时偶尔会返回 401 Unauthorized
- r - 使用 LpSolveAPI 赋值,如何以类似广度优先的方式填充参数?
- angular - RXJS sharedReplay 在重新创建 observable 时不起作用
- javascript - Typescript 解析错误:导入 const 元组时出现意外的令牌类型