我目前正在开发一个JMS系统。我已经能够开发发布服务器(JSF),订阅者(MDB),并且可以从MDB的onMessage
方法将JMS消息打印到控制台。
我的问题是我无法在视图中显示它们:JSF,Applet或JTextArea摆动。
如何从 MDB 的 onMessage 方法调用给定小程序的 JTextArea?我试图从 MDB 实例化一个小程序对象
例如: TestApplet tst = new TestApplet()
:然后进入onMessage
方法,在将消息提取到变量testMessage
我尝试:tst.textAtrea.append(testMessage);
在这里,我从容器中得到了一个错误。
除了上面的例子,我将不胜感激我的问题的任何其他解决方案(只想在视图中显示 JMS 消息,而不仅仅是在控制台上)
从 MDB 调用小程序的一部分是个坏主意。在成功执行 onMessage 方法之前,不会使用消息。我宁愿尝试将消息放在某个存储系统(文件或数据库)中,然后从这些资源中显示。
在您的方案中,您不能真正将 MDB 与 Swing 客户端一起使用。
相反
- 删除 MDB
- 实现独立的命令行 Swing 客户端以直接侦听队列。
- 如果您在 Swing 应用程序中使用
MessageListener
,那么您也将在那里使用onMessage
方法。 - 无论如何,您必须注意从另一个线程更新 Swing 组件的方式: 您可以在此处找到详细信息:我们是否应该使用 EventQueue.invokeLater 在 Java 桌面应用程序中进行任何 GUI 更新?
任何其他客户端类型(JSF、小程序)将更加困难。