2013-07-13 411 views
0

你好我正在使用netbeans編寫RMI客戶端和服務器程序。java.rmi.MarshalException,如何解決它?!

我使用(調用SoundBuffer)在Jsfml使用LIB

一類,並試圖發送它的一個對象時,我得到這個:

SEVERE: null 
java.rmi.MarshalException: error marshalling arguments; nested exception is: 
     java.io.NotSerializableException: org.jsfml.audio.SoundBuffer 
     at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:156) 
     at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:194) 
     at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:148) 
     at $Proxy0.rsound(Unknown Source) 
     at rmicallback.Client1ap.jButton5ActionPerformed(Client1ap.java:238) 
     at rmicallback.Client1ap.access$400(Client1ap.java:30) 
     at rmicallback.Client1ap$5.actionPerformed(Client1ap.java:113) 
     at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) 
     at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) 
     at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 
     at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 
     at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) 
     at java.awt.Component.processMouseEvent(Component.java:6504) 
     at javax.swing.JComponent.processMouseEvent(JComponent.java:3321) 
     at java.awt.Component.processEvent(Component.java:6269) 
     at java.awt.Container.processEvent(Container.java:2229) 
     at java.awt.Component.dispatchEventImpl(Component.java:4860) 
     at java.awt.Container.dispatchEventImpl(Container.java:2287) 
     at java.awt.Component.dispatchEvent(Component.java:4686) 
     at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) 
     at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) 
     at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) 
     at java.awt.Container.dispatchEventImpl(Container.java:2273) 
     at java.awt.Window.dispatchEventImpl(Window.java:2713) 
     at java.awt.Component.dispatchEvent(Component.java:4686) 
     at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707) 
     at java.awt.EventQueue.access$000(EventQueue.java:101) 
     at java.awt.EventQueue$3.run(EventQueue.java:666) 
     at java.awt.EventQueue$3.run(EventQueue.java:664) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
     at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) 
     at java.awt.EventQueue$4.run(EventQueue.java:680) 
     at java.awt.EventQueue$4.run(EventQueue.java:678) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
     at java.awt.EventQueue.dispatchEvent(EventQueue.java:677) 
     at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211) 
     at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128) 
     at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117) 
     at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113) 
     at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105) 
     at java.awt.EventDispatchThread.run(EventDispatchThread.java:90) 
Caused by: java.io.NotSerializableException: org.jsfml.audio.SoundBuffer 
     at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1180) 
     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346) 
     at sun.rmi.server.UnicastRef.marshalValue(UnicastRef.java:292) 
     at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:151) 
     ... 42 more 

Exception while removing reference: java.lang.InterruptedException 
java.lang.InterruptedException 
     at java.lang.Object.wait(Native Method) 
     at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:135) 
     at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:151) 
     at sun.java2d.Disposer.run(Disposer.java:145) 
     at java.lang.Thread.run(Thread.java:722) 

當我嘗試調用服務器的方法是採取的參數類型SoundBuffer

這樣的:

try { 
      //org is type SoundBuffer 
      si.rsound(org, tag); 
     } catch (RemoteException ex) { 
      Logger.getLogger(Client1ap.class.getName()).log(Level.SEVERE, null, ex); 
     } 

,因爲我知道,這是因爲soundbuffer類沒有序列化,所以我可以如何做到這一點,或者我如何序列化對象(組織類型soundbuffer)

請告訴我該怎麼做....並且謝謝。

回答

0

如果你不能改變類來使其可序列化,你將不得不使用別的東西。例如原始數據。

相關問題