我有一个Java软件,该软件最近集成到另一个Java软件中(我称之为“外部”软件)。我们使用听众并回电机制进行两个软件之间的“通信”。

“外部”软件的创建者说,由于我的代码中的某些EDT违规行为,它们会获得NullPoInterException。会这样吗?

有帮助吗?

解决方案

EDT违规 能够 这样的行为,只要这些组件以某种方式与秋千组件相互作用(例如,它们是在组件上的听众)。当然,您可以将表上的桌子盘打开,并询问他们对这些方法是否有断言,如果您启用断言,则代码将清楚地显示违反EDT规则的位置。

编辑(回应评论):

EDT的基本经验法则是,每当您启动新线程时,都不会触摸任何旋转组件(或任何触及摇摆组件的任何旋转组件,例如模型),而无需将代码包裹在可运行的swingutilities.invokelater中(可运行)(可运行) )。它需要Dicipline和一些额外的设计工作,但是在任何严重的应用中绝对必要。

如果您对同步行为进行了大量投资(例如弹出对话框并等待答案),则可以致电Swingutilities.invokeandwait(可运行),但是您应该尽量避免尽可能多地需要。另外,请确保您在 不是 在EDT上,它不起作用。

开始控制此类代码的一种方法是使用这样的断言:

   assert (EventQueue.isDispatchThread())

无论您拥有触摸GUI并启用断言的代码。这样,您会看到错误地接触秋千组件的确切代码路径。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top