1

さて、私は vaadin AppletIntegration Addon を使用して、サウンド レコーダー アプレットを vaadin プロジェクトに統合しています。コードは次のとおりです。

  AppletIntegration applet = new AppletIntegration() {

    private static final long serialVersionUID = 1L;

    @Override
    public void attach() {
      System.out.println("In attach functions");

      setAppletArchives(Arrays.asList(new String[] { "SoundRecordingJar.jar" }));
      setCodebase(path);
      setAppletClass("AudioApplet.class");

      setWidth("800px");
      setHeight("500px");
    }
  };
  mainWindow.addComponent(applet);

ブラウザで実行すると、次の例外が発生します。

 java.lang.ClassFormatError: Incompatible magic value 1008813135 in class file AudioApplet
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(Unknown Source)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)
at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(Unknown Source)
at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source)
at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Unknown Source)
at sun.plugin2.applet.Plugin2Manager.initAppletAdapter(Unknown Source)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

同じアプレットを html ファイルで実行すると、例外なく正常に動作します。アプレットも署名されています。

では、このエラーの意味と解決方法を教えてください。

4

3 に答える 3

1

ブラウザが使用しているJavaバージョンを表示するための単純なアプレットを使用して、これを機能させるためにしばらく時間を費やしました。メインページにAppletIntegrationインスタンスだけが付いた基本的なVaadinサーブレットだけで、他の実際の作業は行われていません。

最初はクラスが見つからないという問題でしたが、修正した後、「クラスファイルに互換性のないマジック値1008813135...」という恐ろしいメッセージが表示されたままになりました。最後に私はそれを理解し、誰かが見に来た場合に備えて、ここに投稿すると思いました...

したがって、この100881315の魔法の値は実際には

AppletIntegrationページ、またはここのフォーラムでさえ明確でないのは、正確にjarをwarファイルのどこに配置する必要があるかです...

これで、アプレットのコーディングを行ったことがある人なら誰でも、CODEBASEがjarの場所を示すことになっている場所であることを知っています。ただし、通常のVaadinサーブレットでは、web.xmlブロック内のサーブレットのURLパターンにも注意する必要があります。

したがって、通常、Vaadinベースのサーブレットのweb.xmlファイルで次のように定義されたサーブレットマッピングがあります。

  <servlet-mapping>
    <servlet-name>AppletTest</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>

したがって、基本的には、着信要求、つまり「/myclasses.jar」をVaadinコントローラーを介してルーティングしているため、Vaadinはそれをチョークし、jarファイルを返しません。それが1008831315エラーを引き起こした私の最初の試みでした...

アプレットフォルダを作成してCODEBASEを「applets/」に設定しようとしたこともありますが、URLパターンがチョークするVaadinコントローラを介してリクエストをルーティングするため、同じエラーが発生します。

したがって、重要なのは、Vaadinコントローラーを介してjarをリソースとして返す方法です...まだ推測していない場合は、jarをVAADINフォルダーに配置することで実現されます(フォーラムのスレッドを読んで、これに関するヒントを得ました) 。

そこで、VAADIN / appletsフォルダーを作成し、そこにjarをドロップし、CODEBASEを「VAADIN / applets /」に設定すると、すべて正しく機能します...

お願いします、サミ、私はあなたにこの小さな真実の塊をどこかのアプレット統合ページに追加するように頼んでいます、少なくとも他の人が私がしたようにこれを追跡するのに何時間も費やす必要がないかもしれません...

于 2012-10-21T17:20:21.193 に答える
1

あなたの魔力値は 1008813135

int magic = 1008813135   ;
ByteBuffer b = ByteBuffer.allocate(4);
b.putInt(magic);
System.out.println(new String(b.array()));  

出力:<!DO

クラスファイルが壊れているようです。「マジック値」はファイルの最初の 4 バイトであり、常に 0xCA 0xFE 0xBA 0xBE である必要があります。代わりに、0x3C 0x21 0x44 0x4F (1008813135 を 16 進数に変換) です。それらはASCIIシーケンスに対応しています

Java キャッシュをクリアするか、デバッグ目的で他の PC を使用してみてください。

無料サービスではアプレットが許可されていない可能性があります。

于 2012-10-20T13:59:27.940 に答える
0

実際には、マジック コードは HTML ファイルの始まりに似ています。<!DOCTYPE.... ダウンロードが失敗したかどうかを確認する必要があるかもしれません (Firebug、Wireshark などで)。これは 404 エラー メッセージである可能性があります。

于 2012-10-20T14:03:27.440 に答える