Почему я получаю ошибку «NoClassDefFoundError: sun / misc / Unsafe» при попытке загрузить звуки с помощью библиотеки LWJGL? - PullRequest
0 голосов
/ 09 июля 2020

Это скриншот моих файлов проекта Eclipse. Eclipse Screenshot

I get the error below when I try to initiated a new Sound("Res/MouseClick.ogg") object in my class AudioPlayer at line 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 soundMap = new HashMap();
    public static Map musicMap = new HashMap();

    public static void load() {
        try {
            soundMap.put("menu_sound", new Sound("Res/MouseClick.ogg")); // 

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:324)
at lwjgl/org.lwjgl.MemoryUtil.<clinit>(MemoryUtil.java:66)
at lwjgl/org.lwjgl.openal.ALC10.alcOpenDevice(ALC10.java:202)
at lwjgl/org.lwjgl.openal.AL.init(AL.java:160)
at lwjgl/org.lwjgl.openal.AL.create(AL.java:138)
at lwjgl/org.lwjgl.openal.AL.create(AL.java:102)
at lwjgl/org.lwjgl.openal.AL.create(AL.java:201)
at slick/org.newdawn.slick.openal.SoundStore$1.run(SoundStore.java:295)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:310)
at slick/org.newdawn.slick.openal.SoundStore.init(SoundStore.java:292)
at slick/org.newdawn.slick.Sound.<init>(Sound.java:54)

at Wave/com.game.AudioPlayer.load(AudioPlayer.java:15)
at Wave/com.game.Game.<init>(Game.java:37)
at Wave/com.game.Game.main(Game.java:157)

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

1 Ответ

1 голос
/ 10 июля 2020

Из вашего опубликованного скриншота IDE я вижу, что вы используете

  • Java 12 и
  • модульную систему Java (module-info.java)

Обратите внимание, что sun/misc/Unsafe является (устаревшим) Java внутренним API , который по этой причине и по умолчанию инкапсулируется (скрывается) при использовании Java Модульная система.

Чтобы ваше приложение (и используемая вами библиотека) могло получить к нему доступ, вам необходимо явно включить его в свой module-info.java, добавив requires jdk.unsupported;

В качестве альтернативы, вы также можете не использовать модульную систему Java - в этом случае она просто должна работать. Однако я рекомендую продолжить использование модульной системы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...