AbhayPrakash Ответов: 0

Как автоматически обновить jtextarea во время выполнения


я создаю многопользовательское чат-приложение с использованием сокетов на java . я столкнулся с проблемой. Текстовая область, где я должен показывать чаты всех пользователей, не обновляется во время выполнения. Я попробовал сделать что-то вроде System.out.print(содержимое текстовой области) , и в командной строке он отображает каждую строку, которую пользователь вводит в своем окне чата, но, как ни странно, текстовая область приложения не обновляется. я публикую весь свой код . пожалуйста, помогите мне, так как это проект, который я собираюсь представить в своем университете.вот код ---

import java.net.*;
import java.io.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.Toolkit;

class mainServer
{
	public static JTextArea content = new JTextArea();
	public static JScrollPane jsp = new JScrollPane(content);
	
	public static void main(String args[])
	{
		content.setEditable(false);
		if(args.length!=1)
		{
			System.out.println("Port Number Required");
			System.exit(-1);
		}
		
		try(ServerSocket server = new ServerSocket(Integer.parseInt(args[0])))
		{
			while(true)
				new chatServerThread(server.accept());
			
		}catch(Exception e){e.printStackTrace();}
	}
}

class chatServerThread implements Runnable
{
	Socket client;
	Thread t;
	String clientName;
	
	chatServerThread(Socket socket)
	{
		client=socket;
		t=new Thread(this,"newThread");
		t.start();
	}
	
	public void run()
	{
		try
		{
			DataInputStream in = new DataInputStream(client.getInputStream());
			clientName = in.readUTF();
		
			String s = "Joined";
			appendOutput(clientName,s);
	
			while(!s.equals("terminate"))
			{
				s=in.readUTF();
				appendOutput(clientName,s);
			}
			
		}catch(Exception e){e.printStackTrace();}	
	}
	
	public void appendOutput(String s1,String s2)
	{
		SwingUtilities.invokeLater(new Runnable(){
			public void run()
			{
				mainServer.content.append(s1+": "+s2);
				System.out.println(mainServer.content.getText());
			}
		});
		
	}
}

What I have tried:

<pre lang="C#">i also read many questions here  , even tried wrapping the update statement in SwingUtilities.invokeLater() but that doesnt helps too

Richard MacCutchan

Какой JTextArea, в чем проблема? В будущем, пожалуйста, не просто сбрасывайте весь свой код и ожидайте, что люди поймут, что происходит и где; предоставьте соответствующие детали, чтобы мы могли хотя бы увидеть, где возникает проблема.

AbhayPrakash

прости за этот глупый поступок. TextArea находится в классе mainServer

AbhayPrakash

и проблема заключается в методе run() класса chatServerThread

0 Ответов