为什么我无法在p
班级的mull
方法中访问我的变量iterate
?
public class mull {
public static void main(String[] args) throws InterruptedException {
final JPanel p = createAndShowGUI();
Timer timer = new Timer(1000, new MyTimerActionListener());
timer.start();
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
}
timer.stop();
public static void iterate(){
for (int i = 0; i < 55; i++){
// "p cannot be resolved"
p.moveSquare(i*10, i*10);
p.setParamsRing(i*5, i*7, 200, 200);
}
}
}
class MyPanel extends JPanel {
....
}
Eclipse为什么强迫我使用它:
((MyPanel) p).setParamsRing(i*5, i*7, 200, 200);
而不是:
p.setParamsRing(i*5, i*7, 200, 200);
答案 0 :(得分:3)
所以你需要的是:
public class mull {
private static final JPanel p;
}
编辑:还有你的上一个问题:这是因为p是JPanel类型,它没有任何方法setParamsRing()。您可能在MyPanel类中添加了该方法。
答案 1 :(得分:1)
将p
声明为类的静态字段:
private static JPanel p;
答案 2 :(得分:0)
为了使静态方法能够看到变量,它必须是静态的或属于类的实例。
非静态变量属于某个类的单个实例,因为没有调用new
,所以它们都没有。
静态变量属于Class
本身。
您可以将变量设置为静态或创建实例并访问它的JPanel
mull m = new mull();
m.p.moveSquare(...);
Eclipse会强制您进行强制转换,因为p
被声明为JPanel
,因此它没有您在setParamsRing()
类中引入的MyPanel
方法。
答案 3 :(得分:0)
静态方法只能访问其他静态方法和类成员。因此,将p定义为静态。
BTW你的课程似乎不可编辑。你有任何方法的代码:
Timer timer = new Timer(1000, new MyTimerActionListener());
timer.start();
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
}
timer.stop();