Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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线程动画_Java - Fatal编程技术网

JAVA线程动画

JAVA线程动画,java,Java,我试图创建一个简单的动画,在一个面板中绘制一些jlabel。我有一个按钮,旁边是一个面板。在面板中,我使用run()方法添加标签,然后将其删除。这就是我希望每次单击按钮时都会发生的事情,但我得到的是“java.lang.IllegalThreadStateException” }您启动了两次线程,这就是为什么会出现IllegalStateException。为每个run()创建Thread类的新实例,如下所示: Thread x = new Thread(Animation.this); x.

我试图创建一个简单的动画,在一个面板中绘制一些jlabel。我有一个按钮,旁边是一个面板。在面板中,我使用run()方法添加标签,然后将其删除。这就是我希望每次单击按钮时都会发生的事情,但我得到的是“java.lang.IllegalThreadStateException”


}

您启动了两次线程,这就是为什么会出现IllegalStateException。为每个run()创建Thread类的新实例,如下所示:

Thread x = new Thread(Animation.this); 
x.start();

创建线程时,您正在传递一个新的动画实例,这就是您无法看到结果的原因。上面的代码调用同一实例的run()。

NB OP,你听说过数组吗?和循环一样-如果你想创建5个类似的标签,你通常只需要创建一个数组或列表,然后通过一个循环进行处理;否则,您将创建一个模糊代码,违反StackOverflow MCVE()约定。我严重怀疑您是否希望
panel
t
是静态的,因为该类似乎被命名为一个可重用的类。@vaxquis它的标签不同。每个标签都不一样。不,每个标签都不一样-了解继承、OOP和数据结构聚合。每一个标签都是同一类的实例——更重要的是,在您的特定情况下,您以完全相同的方式实例化它们。你的编码风格是错误的。您应该以聚合的方式创建子类或执行实例化/声明。我可以做些什么来重新运行run()方法?您应该创建一个新的线程实例并调用start,就像您在注释掉的部分中尝试做的那样。您希望动画循环吗?在
while(true)
循环中包装
run()
函数的主体。代码似乎还有一些其他问题,但如果我理解您的意思,您就可以开始了。@JuliaLeder谢谢!所以“Animation.this”调用当前实例?是的,“this”用于引用类的当前实例。在本例中,“this”将引用内部匿名ActionListener()的实例。这就是为什么需要“This.Animation”,它用于引用外部类实例。
Thread x = new Thread(Animation.this); 
x.start();