Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Guice在UI线程问题之外创建Swing组件?_Java_Swing_Instantiation_Guice_Ui Thread - Fatal编程技术网

Java Guice在UI线程问题之外创建Swing组件?

Java Guice在UI线程问题之外创建Swing组件?,java,swing,instantiation,guice,ui-thread,Java,Swing,Instantiation,Guice,Ui Thread,我正在使用GoogleGuice作为IOC容器开发JavaSwing应用程序。事情进展得很顺利。存在一些UI问题。当一个标准L&F被替换为标准L&F时,由于Guice在UI线程之外创建Swing组件,L&F应用程序不会运行 有没有办法告诉Guice在UI线程中创建Swing组件 也许我应该创建自定义提供程序,它将在SwingUtilities之后返回Swing组件。invokeAndWait(Runnable)创建它们 我不喜欢在UI线程中运行整个应用程序的想法,但可能这只是一个完美的解决方案。

我正在使用GoogleGuice作为IOC容器开发JavaSwing应用程序。事情进展得很顺利。存在一些UI问题。当一个标准L&F被替换为标准L&F时,由于Guice在UI线程之外创建Swing组件,L&F应用程序不会运行

有没有办法告诉Guice在UI线程中创建Swing组件

也许我应该创建自定义提供程序,它将在
SwingUtilities之后返回Swing组件。invokeAndWait(Runnable)
创建它们


我不喜欢在UI线程中运行整个应用程序的想法,但可能这只是一个完美的解决方案。

事实上,它需要在EDT中运行。因此,是的,您的组件应该在EDT中通过调用
invokeAndWait

来准备。在我看来,您不应该使用GUI创建组件,而应该使用服务来创建组件。一旦您注入了服务,就可以很容易地确保在EDT上创建组件(使用
invokeAndWait

您可能想查看我的项目(基于Guice构建的Swing应用程序框架)。 Guts GUI确保在EDT中创建组件,即使是由Guice创建的组件

Guice本身没有提供任何现成的方法来声明要在EDT中创建的组件。我不确定Guice范围是否可以用于此(我认为可以),但是,我不确定任何基于范围的解决方案是否值得,特别是在性能方面

解决此问题的第一步是确保从EDT内部创建Guice注入器(通过使用SwingUtilities.invokeAndWait或invokeLater)。这就是Guts GUI首先要做的事情。因此,如果Guice早期创建了一些组件,那么它们将在EDT中创建


然后,您必须确保从EDT获得Guice注入的任何实例,以及需要创建注入的Swing组件的实例(例如通过
Injector.getInstance(…)
)。

谢谢您的回答。您将如何使用Guice作为Swing组件的唯一创建者来解决这个问题?您可以这样命名:您使用invokeAndWait创建Swing组件……哦,Guice是单线程还是多线程?因为如果它不产生线程,你甚至可以通过在EDT中调用你的第一个getInstance()来简化你的代码。这是解决我问题的最简单的方法。我犯了一个早期的错误,扩展了Swing组件并让Guice实例化它们。在切换到组合(composition)之后,即构建引用Swing组件的服务并在EDT中显式创建它们之后,一切都很顺利。应用程序的响应速度更快,并且不再出现UI故障。提示:如果在EDT之外使用Swing代码,那么Substance look and feel是一个很好的测试工具。