2016-09-27 16 views
1

スマートフォンのRaspberry PiAndroid-AppでJavaプログラムを実行しています。アプリはRaspiで実行中のメソッドを呼び出すことができるはずです。 http://lipermi.sourceforge.net/Java RMI - オブジェクトを渡す

これまでのところは良い、LipeRMIは、ブールまたはint型などのプリミティブデータ型を渡すために働くん:Android以来 は私がLipeRMIを使用し、標準のJava RMIパッケージが含まれていません。

私は、私はエラー、次の受信アプリが、私はこの方法を実行するたびにサーバーからArrayList<String>を渡している今、何をしたいか:

LipeRMIException:Class java.util.ArrayList is not assignable from control.ServerInt 
at lipermi.handler.CallHandler.exportObject(CallHandler.java:54) 
at lipermi.handler.CallHandler.exportObject(CallHandler.java:48) 
at control.RMIServer.createServer(RMIServer.java:26) 
at control.Main.main(Main.java:17) 

私は私が間違ってやっているのか理解していませんここに。

RMIServer.java

public class RMIServer implements ServerInt{ 
    private static final long serialVersionUID = 1L; 
    private ArrayList<String> list; 

    public RMIServer() { 
    list = new ArrayList<String>(); 
     list.add("50:25:5:-1"); 
     list.add("99:42:6:4"); 

     createServer(); 
    } 

    public void createServer() { 
     try { 
      CallHandler callHandler = new CallHandler(); 
      callHandler.registerGlobal(ServerInt.class, this); 
      callHandler.exportObject(ServerInt.class, list); 
      Server server = new Server(); 
      server.bind(7777, callHandler); 

      server.addServerListener(new IServerListener() { 

       @Override 
       public void clientDisconnected(Socket socket) {} 

       @Override 
       public void clientConnected(Socket socket) {} 
      }); 

     } catch (LipeRMIException | IOException e) { 
      e.printStackTrace(); 
     }  
    } 


    @Override 
    public ArrayList<String> getPWMLines() {  
     return list; 
    } 
} 

ServerInt.java

import java.util.ArrayList; 

public interface ServerInt{   
    public ArrayList<String> getPWMLines(); 
} 

答えて

0

あなたが明らかに最初のパラメータがなければならないインターフェイスと第二パラメータを表すクラスである必要がありCallHandler#exportObject(Class, Object)方法を悪用このインタフェースを実装するクラスのインスタンスここではArrayListを2番目のパラメータとして提供していますが、これは明らかにこの例外が発生する原因となるServerIntのインスタンスではありません。最初のパラメータがインターフェースMyRemoteListenerであり、第二は、インタフェースMyRemoteListenerの実装であるMyRemoteListenerImplのインスタンスであるこの場合

MyRemoteListener listenerImplementation = new MyRemoteListenerImpl(); 
callHandler.exportObject(MyRemoteListener.class, listenerImplementation); 

:ここ

は、この方法を使用する方法の良い例です。あなたのListあなたがcallHandler.registerGlobal(List.class, list)

+0

は:)このヒントのため をいただきありがとうございますしかし、どのように、私は、その後のArrayListをエクスポートすることができます試すことができます


公開するには? –

+0

@JasOnできません。 'RMIServer'オブジェクトをエクスポートする必要があります。 – EJP

+0

@EJPまた、それを試みましたが、ArrayListを取得しようとするたびに、私のアプリケーションがクラッシュします:/ –

関連する問題