我正在用Java写一个客户端 - 服务器桌面应用程序。我写了一个运行的服务器(打开套接字)&等待客户端连接。客户端不直接与数据库(MySQL)通信,他们向服务器发送查询,服务器执行查询&将结果集转换为JSON &将其发送回客户端。 在客户端我写一个Listener类:访问从服务器到客户端以外的传递值可运行线程类
private class Listner implements Runnable {
private Thread t;
private final Socket socket;
private BufferedReader input;
Listner(Socket s) {
socket = s;
}
@Override
public void run() {
while (true) {
try {
String message;
message = input.readLine();
sharedInputFromServer = input.readLine();
System.out.println("message value in run(): " + message);
} catch (IOException e) {
}
try {
Thread.sleep(30);
} catch (InterruptedException ex) {
Logger.getLogger(ClientDashboard.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
public void start() {
try {
input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println("input value in start() :" + input);
} catch (IOException e) {
e.printStackTrace();
}
if (t == null) {
t = new Thread (this, "client");
t.start();
}
}
}
在客户机GUI使用返回的数据,我限定的可变
public String sharedInputFromServer;
和用于测试我设置的actionPerformed一个按钮来更新标签有返回值
private void btn_sendToServerActionPerformed(java.awt.event.ActionEvent evt) {
if (null != output) {
String textToSend = "SELECT unit_id, unit_name FROM units;";
output.println(textToSend);
System.out.println("got the share: " + sharedInputFromServer);
lbl_clientStatus.setText(sharedInputFromServer);
}
当我点击链接首次sharedInputFromServer返回null,第二次它再次返回空值(消息在运行()取值)&当我第三次点击按钮时,它返回所需的值。
- 为什么它一开始不工作?
- 这是正确的&从服务器接收查询结果的正确方法&在客户端上使用它吗?
其他问题:我会避免将Thread对象**放入** Runnable中。让调用代码成为启动并控制线程对象本身的代码。 –
请参阅编辑 –
.......... hello? –