Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我无法从其他类访问用户的jEditorPane_Java_Swing_Jframe_Chat_Jeditorpane - Fatal编程技术网

Java 我无法从其他类访问用户的jEditorPane

Java 我无法从其他类访问用户的jEditorPane,java,swing,jframe,chat,jeditorpane,Java,Swing,Jframe,Chat,Jeditorpane,我正在和做聊天室。我有一个用Netbeans创建的jFrame,但我有一个问题。我有两门重要的课。其中之一就是接口本身。另一个是带有run方法的java类,它检查新消息。我将启动一个线程来运行这个run方法。每次我读一条消息时,我都想使用接口的send方法。此方法将消息附加到JEditorPane。但它没有附加它。我确实收到一条消息,但它没有出现在绝地武士窗格中。。。你能帮帮我吗 此方法位于ClientForm1接口上。它会将文本附加到editorpane。我从这里开始一个线程来检查传入的消息

我正在和做聊天室。我有一个用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以正确的方式执行