我正在尝试保存JFrame
的.PNG图像。在JFrame
中,我有两个Plot3DPanel对象。很可能是因为同步故障,在保存.PNG时,左侧框架是不可见的。
因此,我使用以下代码:
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();
}
但现在,我收到编译错误
不能在定义的内部类中引用非final变量i 用另一种方法
然而,我需要我的文件名不同。此外,我需要遍历我的对象数组。我该怎么做才能防止出现此错误?
答案 0 :(得分:2)
一种方法是制作需要传递到匿名内部类的任何变量的最终副本,例如i
是问题:
final int index = i;
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
new VisualSerializer(P[index], Q[index], folder + "C" + index).run();
}
});
另一种解决方案是在匿名内部类中使用类字段。
答案 1 :(得分:1)
您有两个选择:
声明一个新的最终变量,将其初始化为您想要的变量,然后使用副本作为Hovercraft Full Of Eels说
使您的变量成为字段变量。字段变量不需要是最终的,以便在匿名类中使用。
答案 2 :(得分:0)
解决方案。
发现了错误! 这是正确的修改:
final int index = i;
SwingUtilities.invokeAndWait
(
new VisualSerializer(P[index], Q[index], folder + "C" + index)
);
新的Runnable
是多余的。该类已经是Runnable
的类型。