gpt4 book ai didi

Java RMI - 传递对象

转载 作者:太空宇宙 更新时间:2023-11-04 12:12:42 25 4
gpt4 key购买 nike

我正在 Raspberry Pi 上运行 Java 程序和一个Android-App在智能手机上。该应用程序应该能够调用 Raspi 上运行的方法。自 Android不包含标准的Java RMI包,我用过LipeRMI : http://lipermi.sourceforge.net/

到目前为止一切顺利,LipeRMI对于传递 boolean 值或 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();
}

最佳答案

您显然误用了方法CallHandler#exportObject(Class, Object),第一个参数必须是表示接口(interface)的类,第二个参数必须是实现此接口(interface)的类的实例。在这里,您提供了一个 ArrayList 作为第二个参数,它显然不是 ServerInt 的实例,这就是您收到此异常的原因。

以下是如何使用此方法的一个很好的示例:

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

在本例中,第一个参数是接口(interface) MyRemoteListener,第二个参数是 MyRemoteListenerImpl 的实例,它是接口(interface) MyRemoteListener 的实现。

<小时/>

要公开您的List,您可以尝试callHandler.registerGlobal(List.class, list)

关于Java RMI - 传递对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39724562/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com