我有以下课程:
- 主服务器
- TCP服务器
- UDP服务器
我从 MainServer 类创建 TCPServer 和 UDPServer 类的新实例(开始),我的 GUI 在其中初始化。在这个 GUI 中,我有一个textArea,TCP 或 UDP 类需要更新它以显示日志信息(错误、状态等)。我做了一些搜索,我知道我可能需要在 MainServer 中使用 EDT,但不知道如何从 TCPServer 或 UDPServer 访问 MainServer 类中的这个对象。现在我只能打印到控制台,这是不可取的。如何从 TCPServer 访问 MainServer.printlog?或 Mainserver.textArea 对象?如果我从 TCPServer 或 UDPServer 创建一个新的 MainServer 实例,这似乎不起作用。
这是我在 MainServer 类中的函数:
public void printLog (final String log, final int level) {
SwingUtilities.invokeLater(
new Runnable()
{
public void run()
{
if (level == 1)
textArea.append("INFO\t" + log);
if (level == 2)
textArea.append("WARN\t" + log);
if (level == 3)
textArea.append("ERROR\t" + log);
}
}
);
}
编辑:我试图创建一个新的实例MainServer
并访问printLog
,但我得到:
线程“AWT-EventQueue-0”中的异常 java.lang.NullPointerException 在 MultithreadedBarcodeReader.MultithreadedBarcodeReaderServer$2.run( 多线程BarcodeReaderServer.java:68) 在 java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209) 在 java.awt.EventQueue.dispatchEventImpl(EventQueue.java:682) 在 java.awt.EventQueue.access$000(EventQueue.java:85) 在 java.awt.EventQueue$1.run(EventQueue.java:643) 在 java.awt.EventQueue$1.run(EventQueue.java:641)