2016-09-27 3 views
1

스마트 폰의 Raspberry PiAndroid-App에 Java 프로그램을 실행 중입니다. 앱은 Raspi에서 실행중인 메소드를 호출 할 수 있어야합니다. Android 이후 은 표준 자바 RMI 패키지를 포함하지 않는다, 나는 LipeRMI을 사용 : http://lipermi.sourceforge.net/Java RMI - 전달 객체

지금까지 너무 좋아, LipeRMI은 부울 또는 int 등 기본 데이터 형을 전달하는 잘 작동 않습니다.

난 오류 다음 수신 응용 프로그램하지만 난 방법을 실행할 때마다로 서버에서 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) 방법을 오용 이 인터페이스를 구현하는 클래스의 인스턴스 여기서 ArrayListServerInt의 인스턴스가 아닌 두 번째 매개 변수로 제공하므로이 예외가 발생합니다. 첫 번째 파라미터는 인터페이스 MyRemoteListener이고 두 번째 인터페이스 MyRemoteListener의 구현 MyRemoteListenerImpl의 인스턴스 이때

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

: 여기

이 방법을 사용하는 방법의 좋은 예이다. 당신의 List 당신이 callHandler.registerGlobal(List.class, list)

+0

이 :)이 힌트에 대한 감사하지만 어떻게 다음 ArrayList를 내보낼 수 있습니다 시도 할 수 있습니다


노출? –

+0

@JasOn 당신은 할 수 없습니다. 'RMIServer' 오브젝트를 export 할 필요가 있습니다. – EJP

+0

@EJP 또한 시도했지만, ArrayList를 가져올 때마다 내 앱이 다운됩니다 :/ –