0

アプレットに画像やサウンドを読み込もうとすると問題が発生します。アプレットには LWJGL を使用し、画像/サウンドの読み込みには Slick2d を使用しています。しかし、Netbeans でアプレットを起動すると、問題はありません...サウンドをロードするために使用するコードがあります。

public class Files {
    public static Audio sound;

    public static void load() {
        try {
            sound = AudioLoader.getAudio("WAV", ResourceLoader.getResourceAsStream("/snd/Tir1-16b.wav"));
        } catch (IOException ex) {
            Logger.getLogger(Files.class.getName()).log(Level.SEVERE, null, ex);
        }

        System.out.println("loaded with success !");
    }
}

そしてHTMLページがあります:

<applet code="org.lwjgl.util.applet.AppletLoader" archive="lwjgl_util_applet.jar" codebase="." width="800" height="600">

    <!-- The following tags are mandatory -->

    <!-- Name of Applet, will be used as name of directory it is saved in, and will uniquely identify it in cache -->
    <param name="al_title" value="appletloadertest">

    <!-- Main Applet Class -->
    <param name="al_main" value="myapps.MyApps">

    <!-- List of Jars to add to classpath -->
    <param name="al_jars" value="lwjgl_applet.jar, lwjgl.jar, jinput.jar, lwjgl_util.jar MyApps.jar">

    <!-- signed windows natives jar in a jar --> 
    <param name="al_windows" value="windows_natives.jar">

    <!-- signed linux natives jar in a jar --> 
    <param name="al_linux" value="linux_natives.jar">

    <!-- signed mac osx natives jar in a jar --> 
    <param name="al_mac" value="macosx_natives.jar">

    <!-- signed solaris natives jar in a jar --> 
    <param name="al_solaris" value="solaris_natives.jar">

    <!-- Tags under here are optional -->

    <!-- whether to use cache - defaults to true -->
    <!-- <param name="al_cache" value="true"> -->

    <!-- Version of Applet (case insensitive String), applet files not redownloaded if same version already in cache -->
    <!-- <param name="al_version" value="0.1"> -->

    <!-- Specify the minimum JRE version required by your applet, defaults to "1.5" -->
    <!-- <param name="al_min_jre" value="1.6"> -->

    <!-- background color to paint with, defaults to white -->
    <!-- <param name="boxbgcolor" value="#000000"> -->

    <!-- foreground color to paint with, defaults to black -->
    <!-- <param name="boxfgcolor" value="#ffffff"> -->

    <!-- logo to paint while loading, will be centered, defaults to "appletlogo.gif" -->
    <!-- <param name="al_logo" value="appletlogo.gif"> -->

    <!-- progressbar to paint while loading. Will be painted on top of logo, width clipped to percentage done, defaults to "appletprogress.gif" -->
    <!-- <param name="al_progressbar" value="appletprogress.gif"> -->

    <!-- whether to run in debug mode -->
    <!-- <param name="al_debug" value="true"> -->

    <!-- whether to prepend host to cache path - defaults to true -->
    <!-- <param name="al_prepend_host" value="true"> -->

    <param name="separate_jvm" value="true">
  </applet>

そして、アプレットを使用して HTML ページを起動すると、コンソール ログに次のように表示されます。

null
java.lang.reflect.InvocationTargetException
    at java.awt.EventQueue.invokeAndWait(Unknown Source)
    at java.awt.EventQueue.invokeAndWait(Unknown Source)
    at org.lwjgl.util.applet.AppletLoader.run(AppletLoader.java:906)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NoClassDefFoundError: org/newdawn/slick/util/ResourceLoader
    at myapps.Files.load(Files.java:24)
    at myapps.MyApps.init(MyApps.java:32)
    at org.lwjgl.util.applet.AppletLoader.switchApplet(AppletLoader.java:1330)
    at org.lwjgl.util.applet.AppletLoader$2.run(AppletLoader.java:909)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$200(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.newdawn.slick.util.ResourceLoader
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 18 more

null は、変数 Audio が null であることを意味します。これは、ファイルがおそらく見つからないことも意味します...したがって、ディレクトリ「snd」と「sprites」をアプレットディレクトリと、アプレットの.jarに配置しようとしましたが、何も起こりません...

誰でも私を助けることができますか?多くのフォーラムでこの種の問題を見つけようとして多くの時間を検索しましたが、誰も助けてくれませんでした...

どうもありがとう !

4

1 に答える 1

0

ご回答有難うございます。NoClassDefFoundError次のように、htmlページに「slick.jar」を追加して問題を修正しました。

<param name="al_jars" value="MyApps.jar lwjgl_applet.jar, lwjgl.jar, jinput.jar, lwjgl_util.jar slick.jar">

しかし今、私は別の問題を抱えています:

This occurred while 'Initializing real applet'
access denied ("java.io.FilePermission" ".\snd\Tir1-16b.wav" "read")
java.security.AccessControlException: access denied ("java.io.FilePermission" ".\snd\Tir1-16b.wav" "read")
    at java.security.AccessControlContext.checkPermission(Unknown Source)
    at java.security.AccessController.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkRead(Unknown Source)
    at java.io.File.exists(Unknown Source)
    at org.newdawn.slick.util.FileSystemLocation.getResourceAsStream(FileSystemLocation.java:52)
    at org.newdawn.slick.util.ResourceLoader.getResourceAsStream(ResourceLoader.java:61)
    at myapps.Files.load(Files.java:24)
    at myapps.MyApps.init(MyApps.java:32)
    at org.lwjgl.util.applet.AppletLoader.switchApplet(AppletLoader.java:1330)
    at org.lwjgl.util.applet.AppletLoader$2.run(AppletLoader.java:909)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$200(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

この問題について多くのことを読んだので、これらのコマンドを使用して MyApps.jar に署名しようとしました:

keytool -genkey -keyalg rsa -alias key
keytool -export -alias key -file cert.crt
jarsigner MyApps.jar key

MyApps.jar の META-INF にファイル「KEY.RSA」と「KEY.SF」が表示されるようになったため、署名者は機能しました。しかし、問題はまだここにあります...

私は助けが必要です、私はこの問題を理解していません...

ありがとうございました !

于 2013-04-02T18:51:35.933 に答える