Codenameone 在服务器套接字InputStream上调用available()时接收ClassCastException
我正在创建一个服务器套接字,但是只要它点击Codenameone 在服务器套接字InputStream上调用available()时接收ClassCastException,codenameone,Codenameone,我正在创建一个服务器套接字,但是只要它点击intpending=is.available()(上一个链接的第88行)我收到以下异常 [Connection 5432] 0:0:8,306 - Exception: java.lang.ClassCastException - java.net.Socket cannot be cast to com.codename1.impl.android.AndroidImplementation$SocketImpl java.lang.ClassCas
intpending=is.available()代码>(上一个链接的第88行)我收到以下异常
[Connection 5432] 0:0:8,306 - Exception: java.lang.ClassCastException - java.net.Socket cannot be cast to com.codename1.impl.android.AndroidImplementation$SocketImpl
java.lang.ClassCastException: java.net.Socket cannot be cast to com.codename1.impl.android.AndroidImplementation$SocketImpl
at com.codename1.impl.android.AndroidImplementation.getSocketAvailableInput(AndroidImplementation.java:7420)
at com.codename1.io.Socket$SocketInputStream.available(Socket.java:168)
at com.adilam.aw2mob.SocketListener$SocketDataWorker.connectionEstablished(Unknown Source)
at com.codename1.io.Socket$1Listener$1.run(Socket.java:105)
at com.codename1.impl.CodenameOneThread$1.run(CodenameOneThread.java:60)
at java.lang.Thread.run(Thread.java:856)
[Listening on 5432] 0:0:8,323 - Exception: java.lang.NullPointerException - null
java.lang.NullPointerException
at com.codename1.impl.android.AndroidImplementation.getSocketErrorCode(AndroidImplementation.java:7415)
at com.codename1.io.Socket$1Listener.run(Socket.java:110)
at com.codename1.impl.CodenameOneThread$1.run(CodenameOneThread.java:60)
at java.lang.Thread.run(Thread.java:856)
CN1版本是3.7
目前使用的安卓版本是4.0
非常感谢您的任何想法。服务器套接字代码中似乎有一个bug,我们将在下一次更新中修复它
请注意,您所做的是使用一个监听套接字,它本质上不太可移植,只能在JavaSE和Android上工作。如果您使用套接字,我们建议客户端套接字使用connect
而不是listen
实现可移植性。我使用本机接口实现解决了这个问题
提供了在CN1中调用本机接口的非常简洁的概述。我创建了一个NativeSocketListener接口
public interface NativeSocketListener extends NativeInterface {
public void SocketListener(int port);
}
android的NativeSocketListenerImpl
public class NativeSocketListenerImpl {
public void SocketListener(int port) {
new Thread(new SocketListener2(port)).start();
}
public boolean isSupported() {
return true;
}
class SocketListener2 implements Runnable {
private ServerSocket serverSocket;
public SocketListener2(int port) {
try {
serverSocket = new ServerSocket(port);
} catch (IOException e) {
Log.e(e);
}
}
public void run() {
while (true) {
try {
java.net.Socket socket = serverSocket.accept();
InputStream is = socket.getInputStream();
byte[] buffer = new byte[1024];
while (true) {
int pending = is.available();
if (pending > 0) {
int size = is.read(buffer, 0, 1024);
if (size == -1) {
return;
}
if (size > 0) {
String data = new String(buffer, 0, size).trim();
// do something with the data
}
} else {
Thread.sleep(50);
}
}
} catch (Exception e) {
Log.e(e);
}
}
}
}
}
显然,这个实现不处理多个连接,但是有很多在线教程可以实现
如上所述,这是特定于Android的,所以我不能保证它在其他设备上运行得有多好。希望即将发布的版本不需要使用本机接口 谢谢谢。这是一款仅限android的专业应用程序;不是为大众设计的,所以我们真的需要倾听。期待在下一版本中修复bug。(尝试添加+1,但不到15次就无法完成)没问题,您可以接受答案,并在旁边添加复选框,因为您提交了问题,这将给您一些分数。新的更新将在本周五发布