【发布时间】:2014-08-12 20:51:10
【问题描述】:
我意识到标题中有一个几乎相同的问题。这个问题似乎与我的特定问题无关。
我正在使用 JavaFX 场景构建器来创建我的 UI(其中包括有问题的 TextArea)。我要做的就是把我从服务器收到的消息发布到文本区域。通过各种println 声明,我将问题缩小到了这一点。我尝试了各种解决方案(几个小时);来到这里是不得已而为之。
我能想到的唯一可能的原因是多线程出现问题,但甚至可以开始考虑是什么。
public class IncomingReader implements Runnable
{
@Override
public void run()
{
String message;
try
{
while((message = Connection.connection.reader.readLine()) != null)
{
System.out.println("read" + message); //for debug, prints fine
FXMLDocumentController.controller.chatBox
.appendText(message + "\n"); /////////PROBLEM HERE//////
}
}
catch(IOException e)
{
System.out.println("Problem!"); // TODO: Catch better.
}
}
}
FXML 控制器类(仅相关行):
@FXML protected TextArea chatBox;
public class JavaChat extends Application
{
@Override
public void start(Stage stage) throws Exception {
// Create and set up scene...
Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));
Scene scene = new Scene(root);
// Establish connection to server...
Connection.createNewConnection();
// Create new reader thread...
Thread readerThread = new Thread(new IncomingReader());
readerThread.start();
// When all done...
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
定义chatBox的FXML行:
<TextArea id="ChatBox" fx:id="chatBox" focusTraversable="false" mouseTransparent="true" prefHeight="400.0" prefWidth="200.0" promptText="Chat:" wrapText="true" BorderPane.alignment="CENTER">
产生的异常:
Exception in thread "Thread-4" java.lang.NullPointerException
at javachat.IncomingReader.run(IncomingReader.java:28)
at java.lang.Thread.run(Thread.java:745)
【问题讨论】:
-
聊天框初始化了吗?
-
connection或connection.reader是否为空? -
什么时候开始发帖?顺便说一句:不要从 FX 应用程序线程以外的其他线程修改 UI!
-
第28行是哪一个?
-
1.您无法从后台线程更新 UI。可以想象这可能是问题的原因,但可能不是:无论如何您都需要修复它。 2.
FXMLDocumentController.controller是什么?大概它是您的控制器类的一个实例,但它与FXMLLoader创建的实例相同吗?您可能需要显示与此相关的代码。 3. 你确定你已经正确设置了fx:id属性,以便TextArea被注入到控制器中。显示相关的 FXML 代码。
标签: java multithreading nullpointerexception javafx append