我正在聊天室。我有一个用Netbeans创建的jFrame,但我有一个问题。我有两个重要的课程。其中之一就是界面本身。另一个是带有run方法的java类,它可以阻止新消息。我将启动一个运行此run方法的线程。每次我阅读消息时,我都想使用接口的方法发送。此方法将消息附加到JEditorPane。但它没有附加它。我确实收到了一条消息,但它没有出现在jeditorpane中......你能帮助我吗?
此方法在ClientForm1(接口)上。它会将文本附加到编辑窗格。我从这里开始一个线程来检查收到的消息
public void send(String message){
String messages;
messages = jEditorPane1.getText();
jEditorPane1.setText(messages+message+"\n");
}
这是用于检查来自服务器的传入消息的run方法。所有JFrame变量都是私有的。
public ResMesClient(Socket socket, BufferedReader br, PrintStream p){
this.socket = socket;
is=br;
ps = p;
}
@Override
@SuppressWarnings("empty-statement")
public void run(){
String messages;
try {
//This thread will read the server messages
ClientForm1 cf = new ClientForm1(socket,ps); //I create an object
JFrame frame1 = cf; //I create a frame and set it visible.
frame1.setVisible(true);
while(true){
messages = is.readLine();
System.out.println("From ResMesClient : "+messages);
if(!messages.equals("QUITCLIENT"));
else cf.send("Set text works"); //I call a send method of ClientForm1 class
}
} catch (IOException ex) {
}
这两个是不同文件中的两个不同的java类。 但它并没有附加......我尝试了很多东西,但它没有用......至少,我可以确定我确实收到了一条消息,只是它没有追加
提前谢谢
答案 0 :(得分:0)
注意从不属于原始Swing或SWT线程的线程调用SWT或Swing方法 - >其他进程或ThreadGroup。
使用SWT意味着调用text.setText方法必须使用Display对象
执行display.asyncExec(new Runnable() {
public void run() {
cf.send(message)
}
});
使用摆动手段
SwingUtilities.invokeLater(new Runnable() {
public void run() {
cf.send(message);
}
});
所以你的looü应该是这样的
while(true){
messages = is.readLine();
System.out.println("From ResMesClient : "+messages);
if(!messages.equals("QUITCLIENT")) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
cf.send(message);
}
} else {
//Quit programm or whatever
}
});
}
我认为应该有你的问题。