2009-11-06 6 views
3

Я пытаюсь использовать реализацию hessian j2me @http://hessian.caucho.com/ с помощью java me sdk 3.0.ClassFormatError: 56 при использовании hessian в j2me

http://hessian.caucho.com/doc/hessian-overview.xtp#Hessian%20Client%20for%20a%20cell-phone упоминает использование j2me.

Приложение построено без ошибок/предупреждений. Но в момент, когда создается экземпляр, где создается MicroHessianOutput, выбрасывается ClassFormatError ( ).

Heres след:

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 какой-либо опции для ее настройки.

Вот исходный код класса: MicroHessianOutput

Любая идея, почему это могло произойти?

ответ

6

ClassFormatError возникает, когда ваш JVM не может загрузить класс, потому что он не распознает его формат (например, JVM 1.4 пытается загрузить класс, скомпилированный javac 1.5).

Скорее всего, для классов J2ME требуется более старая цель. Попробуйте перекомпилировать ваш материал Гессиана с помощью

javac -target 1.4 ... 
+0

thnx, который сработал. – letronje

+0

Может ли кто-нибудь сказать, как это сделать в Eclipse? (Особенно, используя Eclipse Kepler и Oracle JME SDK 3.4.) – LarsH