我有在run()
方法更新JTextArea
代码。JTextArea中的多线程不工作 - java的
但当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中的线程安全规则。 http://docs.oracle.com/javase/6/docs/api/javax/swing/JTextArea.html#append(java.lang.String)根据文档,你可以附加到其他线程的一个JTextArea。 – Bill
@Bill他们删除了JDK7 javadoc中的该评论。并且从我自己的经验来看,在早期的JDK中线程安全性不是那么高,有的是 – Robin
。谢谢(你的)信息! – Bill