3

Java me sdk 3.0を使用して、ヘシアンj2me実装@ http://hessian.caucho.com/を使用しようとしています。

http://hessian.caucho.com/doc/hessian-overview.xtp#Hessian%20Client%20for%20a%20cell-phoneは、j2me の使用法について言及しています。

アプリケーションは、エラーや警告なしでビルドされます。しかし、MicroHessianOutputインスタンス化された行にヒットした瞬間に ClassFormatError( java.lang.Error: ClassFormatError: 56 ) がスローされます。

トレースは次のとおりです。

TRACE: <at java.lang.Error: ClassFormatError:  56>, startApp threw an Exception
java.lang.Error: ClassFormatError:  56
 - alert.AlertDemo.showOption(), bci=26
 - alert.AlertDemo.startApp(), bci=9
 - javax.microedition.midlet.MIDletTunnelImpl.callStartApp(), bci=1
 - com.sun.midp.midlet.MIDletPeer.startApp(), bci=7
 - com.sun.midp.midlet.MIDletStateHandler.startSuite(), bci=269
 - com.sun.midp.main.AbstractMIDletSuiteLoader.startSuite(), bci=52
 - com.sun.midp.main.CldcMIDletSuiteLoader.startSuite(), bci=8
 - com.sun.midp.main.AbstractMIDletSuiteLoader.runMIDletSuite(), bci=161
 - com.sun.midp.main.AppIsolateMIDletSuiteLoader.main(), bci=26

そしてheres showOption():

private void showOption () throws Exception{
       String url = "http://localhost/hello";

        HttpConnection c = (HttpConnection) Connector.open(url);

        c.setRequestMethod(HttpConnection.POST);

        OutputStream os = c.openOutputStream();
        MicroHessianOutput out = new MicroHessianOutput(os); //error throwing line
        /*
        out.startCall("hello");

        InputStream is = c.openInputStream();

        MicroHessianInput min = new MicroHessianInput(is);
        min.startReply();
        System.out.println(min.readString());
        */
    }

jdk 1.6u16 がインストールされています。ライブラリのクラスが古いjdk用に書かれている可能性があるためだと思います。これを構成するためのオプションが IDE に表示されません。

クラスのソース コードは次のとおりです。

なぜこれが起こっているのでしょうか?

4

1 に答える 1

6

ClassFormatError は、JVM がクラスのフォーマットを認識しないためにクラスをロードできない場合に発生します (たとえば、JVM 1.4 が javac 1.5 によってコンパイルされたクラスをロードしようとしています)。

J2ME では、クラスの古いターゲットが必要になる可能性があります。Hessian のものを再コンパイルしてみてください

 javac -target 1.4 ...
于 2009-11-06T16:42:59.837 に答える