Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.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 使用SwingWorker初始化要返回的JFrame_Java_Swing_Jframe_Swingworker - Fatal编程技术网

Java 使用SwingWorker初始化要返回的JFrame

Java 使用SwingWorker初始化要返回的JFrame,java,swing,jframe,swingworker,Java,Swing,Jframe,Swingworker,我有一个简单的静态方法,当给定一个数字列表时,必须创建一个包含直方图的JFrame 我使用了一个SwingWorker(doInBackground()进行数字运算,done()创建框架,而ChartPanel) 现在,我想将在done()中创建的JFrame的引用(或未来)返回给调用此静态方法的人。有没有办法做到这一点? 我说的是返回未来,因为显然JFrame只在done()方法完成后才存在。作为等待done()的替代方法,在EDT上创建框架和图表面板,publish()临时结果,并在proc

我有一个简单的静态方法,当给定一个数字列表时,必须创建一个包含直方图的
JFrame

我使用了一个
SwingWorker
doInBackground()
进行数字运算,done()创建框架,而
ChartPanel

现在,我想将在
done()
中创建的JFrame的引用(或未来)返回给调用此静态方法的人。有没有办法做到这一点?
我说的是返回未来,因为显然JFrame只在
done()
方法完成后才存在。

作为等待
done()
的替代方法,在EDT上创建框架和图表面板,
publish()
临时结果,并在
process()
中更新图表的数据集。如图所示,图表将侦听数据集中的更改,并应自动更新。

您可以使用get()检索doInBackground()方法的返回值。我不能告诉你它是否能在将来工作,从来没有尝试过类似的事情。SwingWorker不是专门用来创建Swing对象的(事件是可能的,这里有一堆代码示例),在屏幕外创建这个对象,在那里放置JComponents,布局JComponents(在应用程序启动时不重要),在done()中调用pack()和setVisible()包装成invokeLaterexpl。->SwingWorker只是Workers线程和Swing对象之间的桥梁,方法publish()、proccess()、setProcess()和done()保证输出将得到通知EDT@mrKorbel我不确定我是否理解了这个评论。当然,JFrame/JComponents构造函数只能在EDT中调用(在任何时候:)。即使我不使用SwingWorker,而是使用invokeLater,我仍然无法返回JFrame引用,因为它只会在不同的线程上填充。我想问的是,当一个新创建的Jframe要在EDT上创建时,如何构建一个引用它的未来(SwingWorker或invokeLater,没关系)@jannis alexakis谢谢,但是get()返回doInBackground()的结果,而不是done()的“结果”