首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环调用SwingUtilities.invokeAndWait

循环调用SwingUtilities.invokeAndWait
EN

Stack Overflow用户
提问于 2014-04-21 16:19:55
回答 3查看 128关注 0票数 2

我正在试图保存.PNG图像的JFrame。在JFrame中,我有两个Plot3DPanel对象。最可能的原因是由于同步错误,在保存.PNG时,左边大小的帧是不可见的.

因此,我使用以下代码:

代码语言:javascript
复制
try
{
    SwingUtilities.invokeAndWait(new Runnable() {
        public void run() {
            new VisualSerializer(P[i], Q[i], folder + "C" + i).run();
        }
    });

    serialize(P[i], folder + "P" + i);
    serialize(Q[i], folder + "P" + i);

}
catch(Exception e)
{
    e.printStackTrace();
}

但是现在,我得到了编译错误

不能引用在不同方法中定义的内部类中的非最终变量i。

但是,我需要我的文件名不同。此外,我还需要遍历我的对象数组。我能做些什么来防止这个错误?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-21 16:21:55

一种方法是对需要传递到匿名内部类的任何变量进行最终副本,例如,如果i是问题所在:

代码语言:javascript
复制
final int index = i;
SwingUtilities.invokeAndWait(new Runnable() {
    public void run() {
        new VisualSerializer(P[index], Q[index], folder + "C" + index).run();
    }
});

另一种解决方案是在匿名内部类中使用类字段。

票数 2
EN

Stack Overflow用户

发布于 2014-04-21 16:26:23

你有两个选择:

  1. 声明一个新的最终变量,将其初始化为您想要的变量,然后使用该副本,就像Hovercraft中满是鳗鱼说的那样。
  2. 使您的变量成为字段变量。为了在匿名类中使用,字段变量不需要是最终变量。
票数 1
EN

Stack Overflow用户

发布于 2017-07-26 17:03:41

来自OP的解决方案。

发现了错误!这里是正确的修改:

代码语言:javascript
复制
final int index = i;
SwingUtilities.invokeAndWait
(
       new VisualSerializer(P[index], Q[index], folder + "C" + index)
);

一个新的Runnable是多余的。该类已经是Runnable的类型。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23201275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档