【发布时间】:2013-08-22 16:22:06
【问题描述】:
我有一个代码可以更新run() 方法中的JTextArea。
但是当run方法执行时append()方法没有被执行。
它打印incomingMessage 变量的当前值,但不附加到JTextArea。
public void run()
{
while (true)
{
try
{
if(serverSocketMessage==null)
{
serverSocketMessage = new ServerSocket(Constants.INCOMING_MESSAGE_PORT);
}
System.out.println("Listening to incoming messages");
ObjectInputStream objectInputSender;
String incomingMessage = null;
serverMessage = serverSocketMessage.accept();
objectInputSender = new ObjectInputStream(serverMessage.getInputStream());
Object objectMessage = objectInputSender.readObject();
if (objectMessage instanceof String)
{
incomingMessage = objectMessage.toString();
System.out.println("\nMessage\n"+incomingMessage);
if(incomingMessage!= null)
{
chatingJTextArea.append(incomingMessage);
System.out.println("Not null");
}
chatingJTextArea.append("\n");
chatingJTextArea.append(incomingMessage);
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
【问题讨论】:
-
JTextArea 的 append 方法是 Swing 中线程安全规则的一个例外。 docs.oracle.com/javase/6/docs/api/javax/swing/… 根据文档,您可以从其他线程追加到 JTextArea。
-
@Bill 他们在 JDK7 javadoc 中删除了该评论。根据我自己的经验,早期的 JDK 中的线程也不是安全的
-
有趣。感谢您的信息!
标签: java multithreading swing jtextarea