【发布时间】:2016-09-18 23:28:58
【问题描述】:
我有一个名为Server 的JFrame,它托管一个带有TextArea 的套接字服务器作为控制台。每个连接的客户端都会创建一个名为clientThread 的新线程。
我的问题是:clientThread 如何将字符串附加到服务器中的 TextArea。我想将运行类作为参数传递,但我不知道该怎么做。有什么想法吗?
客户端线程:
public class ClientThread extends Thread{
Socket clientSocket;
int ClientID = -1;
boolean running = true;
BufferedReader in;
PrintWriter out;
Server console;
public ClientThread(Socket s,int id,Server obj) throws IOException{
clientSocket=s;
ClientID=id;
console=obj;
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
out = new PrintWriter (new OutputStreamWriter(clientSocket.getOutputStream()));
}
服务器:
public class Server extends javax.swing.JFrame {
/**
* Creates new form Server
*/
public Server() {
initComponents();
}
static public void writeToConsole(String s) {
jTextArea1.append(s);
}
public static void main(String args[]) {
try {
ServerSocket servSocket = new ServerSocket(8008);
writeToConsole("Server Started\n");
int clientID = 1;
while (true) {
Socket clientSocket = servSocket.accept();
//Pass this class to the ClientThread As object??
ClientThread clientThread = new ClientThread(clientSocket, clientID++, (theObjectOfThisClass))
);
clientThread.start();
}
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Server().setVisible(true);
}
});
} catch (IOException ex) {
Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
编辑:固定 ClientThread 构造函数
【问题讨论】:
-
您在寻找
this吗? -
@chrylis 是的,这个关键字有效,但是该类是非静态的,并且该语句在 main 方法中。有什么想法吗?
-
我对您创建线程的方式感到困惑。这发生在无限循环中,因此即使您知道如何将
JFrame的实例发送到每个线程,您仍然永远不会显示窗口。 -
所以为了澄清一下,这些
ClientThreads 的目的是什么?它们将如何用于您正在构建的系统的其余部分? -
更重要的是,为什么需要无限多线程?