我有一个名为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
@chrylis啊是这个关键字的作品,但是这个类是非静态的,这个语句在主要方法中。有任何想法吗? –
我很困惑你如何创建线程。这发生在一个无限循环中,所以即使你想出如何发送'JFrame'的实例给每个线程,你仍然不会显示窗口。 –