首页 > 解决方案 > 运行 Slick2D 导致 NoClassDefFoundError

问题描述

我尝试使用 Java 运行一个简单的游戏,并在尝试运行此应用程序时不断收到错误消息。

线程“main”中的异常 java.lang.NoClassDefFoundError: sun/misc/Unsafe ...

我认为我的问题是我的 JDK(12.0.2)不支持这些 Slick2D,因为它是“过时的”。如果降级我的 Java 版本是一种解决方案,有人可以解释我如何找到支持 Slick2D 的 Java 版本吗?

我已经在我的 IDE 中设置了我的库并设置了我的路径。我尝试在最新的 Intellij 和 eclipse 环境中运行相同的应用程序。我目前安装了 JDK 12.0.2 并安装了 2015 版的 LWJGL 和 Slick2D。

package classPackage;

import org.newdawn.slick.*;

public class Game extends BasicGame{


        public Game(String gamename) {
            super(gamename);
        }

        @Override
        public void init(GameContainer gc) throws SlickException {
        }

        @Override
        public void update(GameContainer gc, int i) throws SlickException {
        }

        @Override
        public void render(GameContainer gc, Graphics g) throws SlickException {
            g.drawString("Howdy!", 10, 10);
        }

        public static void main(String[] args) {
            try {
                AppGameContainer appgc;
                appgc = new AppGameContainer(new Game("Simple Slick Game"));
                appgc.setDisplayMode(640, 480, false);
                appgc.start();
            } catch (SlickException ex) {

            }

        }


}

错误:

Exception in thread "main" java.lang.NoClassDefFoundError: sun/misc/Unsafe
    at lwjgl/org.lwjgl.MemoryUtilSun$AccessorUnsafe.getUnsafeInstance(MemoryUtilSun.java:74)
    at lwjgl/org.lwjgl.MemoryUtilSun$AccessorUnsafe.<init>(MemoryUtilSun.java:62)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
    at java.base/java.lang.reflect.ReflectAccess.newInstance(ReflectAccess.java:166)
    at java.base/jdk.internal.reflect.ReflectionFactory.newInstance(ReflectionFactory.java:404)
    at java.base/java.lang.Class.newInstance(Class.java:590)
    at lwjgl/org.lwjgl.MemoryUtil.loadAccessor(MemoryUtil.java:375)
    at lwjgl/org.lwjgl.MemoryUtil.<clinit>(MemoryUtil.java:63)
    at lwjgl/org.lwjgl.opengl.WindowsDisplay.setTitle(WindowsDisplay.java:522)
    at lwjgl/org.lwjgl.opengl.Display.setTitle(Display.java:541)
    at lwjgl/org.lwjgl.opengl.Display.createWindow(Display.java:312)
    at lwjgl/org.lwjgl.opengl.Display.create(Display.java:848)
    at lwjgl/org.lwjgl.opengl.Display.create(Display.java:757)
    at slick/org.newdawn.slick.AppGameContainer.tryCreateDisplay(AppGameContainer.java:302)
    at slick/org.newdawn.slick.AppGameContainer.access$000(AppGameContainer.java:34)
    at slick/org.newdawn.slick.AppGameContainer$2.run(AppGameContainer.java:353)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:310)
    at slick/org.newdawn.slick.AppGameContainer.setup(AppGameContainer.java:348)
    at slick/org.newdawn.slick.AppGameContainer.start(AppGameContainer.java:317)
    at testGame/classPackage.Game.main(Game.java:31)
Caused by: java.lang.ClassNotFoundException: sun.misc.Unsafe
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    ... 23 more

标签: javalwjglslick2d

解决方案


我能够通过将我的 jdk 降级到 8 来解决这个问题。谢谢大家,我希望这对将来的某人有所帮助。


推荐阅读