|
|
1
2
编辑:
我猜黑色图像是因为您导致事件调度线程(EDT)休眠。因此,尽管框架正在使用pack()语句调整大小,但新加载的图像没有被绘制。 不要使用线程。sleep()在EDT上执行的代码中。从侦听器执行的所有代码都在EDT上执行。相反,您应该使用 Swing Timer 以安排事件以更新标签的图像。 编辑2: 阅读Swing教程中的部分 Concurrency 。通常,所有事件代码都在EDT上执行。当EDT被阻挡时,Swing组件不能重新喷漆。
上述语句将导致在“mainImage”标签上调用重新绘制()。重新绘制()请求被传递给RepaintManager,并将绘制请求添加到EDT的末尾。 因此,标签将在“doStuff()”方法中的所有代码执行完毕后绘制。 但是,您也可以调用
在方法的末尾。因此,当图像实际被绘制时,其图标已被第二次更改,因此仅绘制第二个图标。 在这两个语句之间,读取图像后,调用pack()方法时调整帧的大小。我相信这是因为框架的打包导致了OS级的绘制,因为框架是一个OS小部件,而不是Swing组件。换句话说,即使框架上的组件没有重新绘制,也可以调整框架的大小。 如果你想要一个快速响应的GUI,那么你就不能在EDT上执行长时间运行的代码。在第二个SSCCE的情况下,您添加的“for循环”需要很长时间 这将有效阻止EDT并防止新读取的图标被绘制。
因此,长时间运行的任务应在单独的
|
|
|
user29759326 · 如何返回递归函数中的最后一个值? 1 年前 |
|
|
malife89 · 将java中的字符串读取为正确的日期格式 1 年前 |
|
|
Tim · 在java中,有没有更快的方法将字节数组写入文件? 1 年前 |
|
|
rudraraj · java中未声明最终变量 1 年前 |
|
|
Bala Ji · 以下BFS的实施效率如何? 1 年前 |