Я не могу получить доступ к jEditorPane пользователя из другого класса
Я делаю чат с. У меня есть один jFrame, созданный с Netbeans, но у меня есть одна проблема. У меня есть 2 важных класса. Одним из них является сам интерфейс. Еще один класс Java с методом run, который проверяет наличие новых сообщений. Я начну поток, который будет запускать этот метод запуска. Каждый раз, когда я читаю сообщение, я хочу использовать метод send интерфейса. Этот метод добавит сообщение в JEditorPane. Но это не добавляет его. Я получаю сообщение, но оно не появляется на панели jeditorpane... Не могли бы вы помочь мне, пожалуйста?
Этот метод находится на ClientForm1(интерфейс). Он добавит текст в панель редактора. Я начинаю здесь тему, чтобы проверить входящие сообщения
public void send(String message){
String messages;
messages = jEditorPane1.getText();
jEditorPane1.setText(messages+message+"\n");
}
И это метод запуска для проверки входящих сообщений с сервера. Все переменные 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-класса в разных файлах. Но это не добавление... Я перепробовал много вещей, но это не работает... По крайней мере, я могу точно сказать, что я получаю сообщение, только оно не добавляется
заранее спасибо
1 ответ
Позаботьтесь о вызове метода SWT или Swing из потоков, которые не принадлежат исходному потоку Swing или SWT -> Другой процесс или 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);
}
});
Так что ваш любимец должен выглядеть так
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
}
});
}
Я думаю, что должна быть ваша проблема.