当我尝试使用 LWJGL 库加载声音时,为什么会收到错误“NoClassDefFoundError: sun/misc/Unsafe”?

Shl*_*rma 8 java noclassdeffounderror lwjgl

这是我的 Eclipse 项目文件的屏幕截图。 日食截图

new Sound("Res/MouseClick.ogg")当我尝试在类中的AudioPlayer第 15 行启动一个对象时,出现以下错误。

package com.game;
import java.util.HashMap;
import java.util.Map;

import org.newdawn.slick.Music;
import org.newdawn.slick.Sound;

public class AudioPlayer {
    public static Map<String, Sound> soundMap = new HashMap<String, Sound>();
    public static Map<String, Music> musicMap = new HashMap<String, Music>();

    public static void load() {
        try {
            soundMap.put("menu_sound", new Sound("Res/MouseClick.ogg")); // <- throws error
            musicMap.put("music", new Music("Res/Background.ogg"));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static Music getMusic(String key) {
        return musicMap.get(key);
    }

    public static Sound getSound(String key) {
        return soundMap.get(key);
    }
}
Run Code Online (Sandbox Code Playgroud)
package com.game;
import java.util.HashMap;
import java.util.Map;

import org.newdawn.slick.Music;
import org.newdawn.slick.Sound;

public class AudioPlayer {
    public static Map<String, Sound> soundMap = new HashMap<String, Sound>();
    public static Map<String, Music> musicMap = new HashMap<String, Music>();

    public static void load() {
        try {
            soundMap.put("menu_sound", new Sound("Res/MouseClick.ogg")); // <- throws error
            musicMap.put("music", new Music("Res/Background.ogg"));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static Music getMusic(String key) {
        return musicMap.get(key);
    }

    public static Sound getSound(String key) {
        return soundMap.get(key);
    }
}
Run Code Online (Sandbox Code Playgroud)

Ivo*_*ori 15

从您发布的 IDE 屏幕截图中我可以看到您正在使用

\n
    \n
  • Java 12,以及
  • \n
  • Java 模块系统 ( module-info.java)
  • \n
\n

请注意,这sun/misc/Unsafe是一个(传统的)Java 内部 API,因此,在使用 Java 模块系统时,默认情况下它会被封装(隐藏)。

\n

为了让您的应用程序(以及您使用的库)访问它,您需要通过module-info.java添加来显式地将其包含在您的应用程序中requires jdk.unsupported;

\n

或者,您也可以不使用 Java 模块系统 \xe2\x80\x93 在这种情况下它应该可以正常工作。不过,我建议继续使用模块系统。

\n