Java (泛型类)。this.revalidate();在Mac上
我使用的是2010 Mac和1.6.0_37 Java,使用DrJava进行编译。revalidate方法未编译,我收到以下错误:Java (泛型类)。this.revalidate();在Mac上,java,macos,swing,Java,Macos,Swing,我使用的是2010 Mac和1.6.0_37 Java,使用DrJava进行编译。revalidate方法未编译,我收到以下错误: 2 errors found: File: /Users/#########/compsci/Final/ConnectFourFrame.java [line: 123] Error: /Users/#########/compsci/Final/ConnectFourFrame.java:123: cannot find symbol symbol : me
2 errors found:
File: /Users/#########/compsci/Final/ConnectFourFrame.java [line: 123]
Error: /Users/#########/compsci/Final/ConnectFourFrame.java:123: cannot find symbol
symbol : method revalidate()
location: class ConnectFourFrame
这是导致错误的方法:
try
{
//display in window
updateTitleBar();
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(currentFile));
colorGrid = (Color[][]) ois.readObject();
makeGrid();
for(int k = 0; k < 6; k++)
{
for(int l = 0; l < 7; l++)
{
if (colorGrid[k][l]==null)
{
grid[k][l] = new BlankTile(new Point(k, l));
}
else if (colorGrid[k][l].equals(Color.red))
{
grid[k][l] = new RedTile(new Point(k, l));
}
else if (colorGrid[k][l].equals(Color.black))
{
grid[k][l] = new BlackTile(new Point(k, l));
}
}
}
putNewGrid();
String currentColor = (String) ois.readObject();
ois.close();
ConnectFourFrame.this.repaint();
ConnectFourFrame.this.revalidate(); //This is the offending line
gp.revalidate();
gp.repaint();
}
外部类是ConnectFourFrame扩展了JFrame并实现了Runnable
如何解决此问题?Component.revalidate在Java 7中是新的。大概你在Windows上使用的是7,而在Mac上使用的是6
如果您需要您的代码在Java6上工作,那么您必须以不同的方式进行操作。警察说
这是一种方便的方法,可以帮助应用程序开发人员避免手动查找验证根。基本上,这相当于首先在此组件上调用invalidate方法,然后在最近的validate根上调用validate方法
因为JFrame本身就是一个验证根,所以您应该能够用invalidate替换revalidate调用,然后是validate。Component.revalidate在Java 7中是新的。大概你在Windows上使用的是7,而在Mac上使用的是6
如果您需要您的代码在Java6上工作,那么您必须以不同的方式进行操作。警察说
这是一种方便的方法,可以帮助应用程序开发人员避免手动查找验证根。基本上,这相当于首先在此组件上调用invalidate方法,然后在最近的validate根上调用validate方法
因为JFrame本身就是一个验证根,所以您应该能够将revalidate调用替换为invalidate,后跟validate
决不在try-catch-finally块中使用GUI状态进行管理,该块对所有程序都有效。语言
在此表单中,您可以在此处发布任何异常刷新Swing GUI的代码
ois.close;应该移到最后一个街区
您的问题是JFrame的交换线路订单,并从重新验证中删除re,例如ConnectFourFrame.this.validate;然后连接fourframe.this.repaint
没有理由对Java versions>Java5使用invalidate,该方法在所有LayoutManager API中都实现,并且正确无误
在Java7中,在API中为JFrame添加了重新验证,对于次要Java版本使用验证
决不在try-catch-finally块中使用GUI状态进行管理,该块对所有程序都有效。语言
在此表单中,您可以在此处发布任何异常刷新Swing GUI的代码
ois.close;应该移到最后一个街区
您的问题是JFrame的交换线路订单,并从重新验证中删除re,例如ConnectFourFrame.this.validate;然后连接fourframe.this.repaint
没有理由对Java versions>Java5使用invalidate,该方法在所有LayoutManager API中都实现,并且正确无误
在Java7中,在API中为JFrame添加了重新验证,对于次要Java版本使用验证
这可以在Windows上编译并运行,但不能在Mac上编译。这可以在Windows上编译并运行,但不能在Mac上编译。JComponentrevalidate存在于JDK1.6上,并且由于类是从JFrame扩展而来,所以它应该只编译fine@RobinJFrame没有扩展JComponent.Whoops。你是对的。因此,我们习惯于看到J前缀意味着它扩展了JComponent…@Robin我怀疑swing的设计者希望它能够,但是,由于Java不执行多重继承,而且JFrame必须是一种窗口,所以他们没有这个选项……JComponentrevalidate存在于JDK1.6上,并且由于该类从JFrame扩展而来,所以应该只编译它fine@RobinJFrame没有扩展JComponent.Whoops。你是对的。因此,在看到J前缀意味着它扩展了JComponent…@Robin时,我怀疑swing的设计者希望它能够,但由于Java不做多重继承,而且JFrame必须是一种窗口,所以他们没有这个选项。。。