Java 我无法从其他类访问用户的jEditorPane
我正在和做聊天室。我有一个用Netbeans创建的jFrame,但我有一个问题。我有两门重要的课。其中之一就是接口本身。另一个是带有run方法的java类,它检查新消息。我将启动一个线程来运行这个run方法。每次我读一条消息时,我都想使用接口的send方法。此方法将消息附加到JEditorPane。但它没有附加它。我确实收到一条消息,但它没有出现在绝地武士窗格中。。。你能帮帮我吗 此方法位于ClientForm1接口上。它会将文本附加到editorpane。我从这里开始一个线程来检查传入的消息Java 我无法从其他类访问用户的jEditorPane,java,swing,jframe,chat,jeditorpane,Java,Swing,Jframe,Chat,Jeditorpane,我正在和做聊天室。我有一个用Netbeans创建的jFrame,但我有一个问题。我有两门重要的课。其中之一就是接口本身。另一个是带有run方法的java类,它检查新消息。我将启动一个线程来运行这个run方法。每次我读一条消息时,我都想使用接口的send方法。此方法将消息附加到JEditorPane。但它没有附加它。我确实收到一条消息,但它没有出现在绝地武士窗格中。。。你能帮帮我吗 此方法位于ClientForm1接口上。它会将文本附加到editorpane。我从这里开始一个线程来检查传入的消息
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类。
但它不是附加。。。我尝试了很多东西,但都不起作用。。。至少,我可以肯定地说我确实收到了一条消息,只是它没有附加
提前感谢您注意从不属于原始Swing或SWT线程->其他进程或线程组的线程调用SWT或Swing方法 使用SWT意味着调用text.setText方法必须使用Display对象执行
display.asyncExec(new Runnable() {
public void run() {
cf.send(message)
}
});
使用摆动方式
SwingUtilities.invokeLater(new Runnable() {
public void run() {
cf.send(message);
}
});
所以你的厕所应该是这个样子
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
}
});
}
我认为这应该是您的问题。作为参考,这里展示了一个完整的工作示例。我刚刚看到了您的完整代码,我认为问题只是socket和serversocket的概念。如果你愿意的话,我可以给你一个简单的例子,直到周日。另外,请看一下Java Net API和套接字编程。非常感谢。我现在真的哭了。我花了两个晚上试图解决这个问题!非常感谢你!如果这对你来说不难的话,你能简单地解释一下SwindUtilities.invokeLaternew运行的是什么吗?谢谢好的,问题是。你必须使用不同的线程。控制套接字网络应用程序和Swing线程的一个线程。如果要从SwingThread外部影响任何类型的Swing UI,必须将其排入Swing AWT事件队列,以便以正确的方式显示它。这是使用invokeLater方法完成的。此方法确保传递的线程正确插入AWT EventQueue,并由Swing API以正确的方式执行