2014-02-17 4 views
0

У меня возникла проблема с настройкой текста в JTextArea, я попробовал setText (который я бы предпочел) и добавлю также. Я не знаю, где проблема, я получил приложение клиент-сервер. Я хочу поставить сообщение, что сервер посылает в JTextField, но я не могу вот мой код:JTextArea setText не работает

стороне клиента код, который reciving сообщение правильно: метод

try 
    { 


     Socket socket = new Socket("localhost", PORT); 
     BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); 
     DataOutputStream output = new DataOutputStream(socket.getOutputStream()); 
     BufferedReader serverInput = new BufferedReader(new InputStreamReader(socket.getInputStream())); 

     output.writeBytes(outputString + "\n"); 
     inputString = serverInput.readLine(); // private String inputString 
     mymodel.setTextArea(inputString); // this is not working 
     System.out.println(inputString); // this is working 
     socket.close(); 

    } 
    catch... 

setTextArea:

public void setTextArea(String string) 
{ 
    MyPanel mypanel = new MyPanel(); 
    mypanel.textArea.setText(string); // debugger shows that the string contains message from server 
} 

Я установил textarea для публики, так как метод setter не работал, на самом деле этот тоже не работает. Я не знаю, где проблема, и отладчик тоже не помогает мне.

В поисках ваших ответов

EDIT:

JTextTable код:

textArea = new JTextArea(1, 30); 
textArea.setEditable(false); 
panel.add(textArea, c); 

ответ

0

Try, чтобы получить доступ через геттер. Как

public JTextArea getTextArea() 
{ 
    return jTextAreaField; 
} 

, а затем

getTextArea().append("ur text"); 
1

Вы создаете новый экземпляр MyPanel каждый раз, когда метод setTextArea называется, это означает, что что когда-либо на экране не используется для применения текста, который вы его отправляете.

Вместо этого, вы должны использовать оригинальный экземпляр MyPanel, который вы создали, чтобы показать на экране ...

Это также невозможно определить, если вы звоните блокирующий ввод/вывод из содержания Диспетчерских событий Поток или взаимодействие с пользовательским интерфейсом из другой нити. В любом случае, это очень unrecommended

Взгляните на Concurrency in Swing для более подробной информации

1

Есть две основные проблемы:

  1. Вы выполняете модификации пользовательского интерфейса на том же потоке, что и IO, который вы никогда не должны этого делать. Рассмотрите возможность работы с SwingWorker для операций ввода-вывода.

  2. В setTextArea вы не видите экземпляр MyPanel, который у вас уже есть, но создаете новый. Таким образом, изменения не делаются в MyPanel, например, что у вас уже есть ...

+0

Как получить доступ к существующему экземпляру MyPanel из другого класса тогда? – bbZ

+0

Если вы будете следовать учебнику в моем первом пункте, это будет легче, чем взломать его (хотя это абсолютно возможно) – MByD

1
JTextArea t=new JTextArea(); 
    t.append("Text"); 
    no Method in java to set Text for JTextArea. 
    the append method to add text in JTextArea 
Смежные вопросы