我正在尝试使用此处提供的示例代码构建一个HelloWord websocket客户端:https://github.com/Gottox/socket.io-java-client/blob/master/examples/basic/BasicExample.java
目标是连接到使用以下内容的Flask服务器:https://github.com/miguelgrinberg/Flask-SocketIO-Chat我构建的python中的客户端工作正常,但我还需要构建一个java客户端。
我看过很多不同的解决方案,建议在编译期间添加-cp
,但仍然会收到相同的消息Error: Could not find or load main class TestClient
我做错了什么?
我正在使用这个脚本来编译&运行
#!/bin/sh
export JAVA_HOME="/usr/lib/jvm/java-8-oracle"
/usr/lib/jvm/java-8-oracle/bin/javac TestClient.java -cp /home/erm/git/Flask-SocketIO-Chat/*.jar:*:.:./
echo "exitcode:$?"
/usr/lib/jvm/java-8-oracle/bin/java TestClient
这是输出:
exitcode:0
Error: Could not find or load main class TestClient
import io.socket.IOAcknowledge;
import io.socket.IOCallback;
import io.socket.SocketIO;
import io.socket.SocketIOException;
import org.json.JSONException;
import org.json.JSONObject;
public class TestClient implements IOCallback {
private SocketIO socket;
/**
* @param args
*/
public static void main(String[] args) {
System.out.println("Hello, World");
try {
new TestClient();
} catch (Exception e) {
e.printStackTrace();
}
}
public TestClient() throws Exception {
socket = new SocketIO();
socket.connect("http://127.0.0.1:5000/", this);
// Sends a string to the server.
socket.send("Hello Server");
// Sends a JSON object to the server.
socket.send(new JSONObject().put("key", "value").put("key2",
"another value"));
// Emits an event to the server.
socket.emit("event", "argument1", "argument2", 13.37);
}
@Override
public void onMessage(JSONObject json, IOAcknowledge ack) {
try {
System.out.println("Server said:" + json.toString(2));
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onMessage(String data, IOAcknowledge ack) {
System.out.println("Server said: " + data);
}
@Override
public void onError(SocketIOException socketIOException) {
System.out.println("an Error occured");
socketIOException.printStackTrace();
}
@Override
public void onDisconnect() {
System.out.println("Connection terminated.");
}
@Override
public void onConnect() {
System.out.println("Connection established");
}
@Override
public void on(String event, IOAcknowledge ack, Object... args) {
System.out.println("Server triggered event '" + event + "'");
}
}
答案 0 :(得分:2)
错误消息
Error: Could not find or load main class TestClient
表示Java启动程序无法找到/加载类文件TestClient.class
。
要正确加载它,类文件本身和jar文件socketio.jar都需要在类路径上。所以请尝试
/usr/lib/jvm/java-8-oracle/bin/java -cp .:socketio.jar TestClient
或
/usr/lib/jvm/java-8-oracle/bin/java -cp /home/erm/git/Flask-SocketIO-Chat:/home/erm/git/Flask-SocketIO-Chat/socketio.jar TestClient
答案 1 :(得分:0)
如果文件丢失,上一个答案应该有效。
但在此之前,您能否检查一下Java文件是否已编译,因为它是通过shell运行的?
如果没有请编译java文件
javac TestClient.java
如果您在TestClient.java所在的路径中
或提供完整的路径,例如。 javac /app/javafiles/TestClient.java