Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.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中使用invokeLater方法,会发生什么_Java - Fatal编程技术网

如果我们没有在java中使用invokeLater方法,会发生什么

如果我们没有在java中使用invokeLater方法,会发生什么,java,Java,谁能给我举一个例子,说明如果我们不在Java中使用invokeLater()方法会发生什么 class FibComputer implements Runnable{ public void run(){ final int result = fib(47); SwingUtilities.invokeLater(new Runnable(){ public void run(){ jlbFib.s

谁能给我举一个例子,说明如果我们不在Java中使用
invokeLater()
方法会发生什么

class FibComputer implements Runnable{
    public void run(){
        final int result = fib(47);
        SwingUtilities.invokeLater(new Runnable(){
            public void run(){
                jlbFib.setText(String.valueOf(result));
在Swing程序中,初始线程没有很多事情要做。他们最重要的工作是创建一个
Runnable
对象,该对象初始化GUI并计划在事件调度线程上执行该对象。创建GUI后,程序主要由GUI事件驱动,每个事件都会导致在事件调度线程上执行一个短任务。 应用程序代码可以在事件分派线程(如果它们很快完成,以避免干扰事件处理)或工作线程(对于长时间运行的任务)上安排其他任务

初始线程通过调用
javax.swing.SwingUtilities.invokeLater
javax.swing.SwingUtilities.invokeAndWait
来调度GUI创建任务。 这两种方法都使用一个参数:定义新任务的
Runnable
。它们唯一的区别在于它们的名称:
invokeLater
只是调度任务并返回
invokeAndWait
等待任务完成后返回。


说到您的观点,我相信您的应用程序是
swing
应用程序。如果您没有使用
invokeLater
方法,那么您将如何创建和初始化
Runnable
对象,因为为
Runnable
创建对象意味着您要定义一个新任务,即执行
run()
方法。

jlbFib
我想是一个
JLabel
,而
FibComputer
打算在与事件调度线程不同的线程上运行

javax.swing
的软件包说明如下:

所有Swing组件和相关类别,除非另有说明, 必须在事件调度线程上访问

jlbFib.setText()
调用就是这样一种访问,因此它正确地包装在
SwingUtilities.invokeLater(…)


如果不这样做,您可能会遇到任何类型的线程安全问题。通常,在90%的情况下,一切看起来都很好,有时标签无法正确更新,有时布局可能会崩溃,或者GUI可能会完全冻结。

好吧,如果您只是尝试一下,会发生什么?什么是
jlbFib
?我们怎么知道它是做什么的?run方法不会被调用?