package gui;
public class Solver {
void solveIt(){
CubeGui.moveThat();
}
}
我正在尝试从此类访问方法moveThat,但它一直告诉我无法从静态引用访问非静态方法moveThat。我不知道这是一个静态参考?
答案 0 :(得分:6)
CubeGui
如何定义?拼写表明它是一个类名,在这种情况下,moveThat
必须被static
访问,因为您没有创建CubeGui
的实例
答案 1 :(得分:4)
要扩展我在Konrad Rudolph的回答中留下的一条评论......
我的猜测是你的CubeGui
类声明看起来像这样:
public class CubeGui extends javax.swing.JFrame {
public void moveThat() {
// do stuff
}
}
它应该如下所示(注意moveThat
方法上的静态引用):
public class CubeGui extends javax.swing.JFrame {
public static void moveThat() {
// do stuff
}
}
或者您需要Solver
的实现看起来像这样:
public class Solver {
private void solveIt() {
new CubeGui().moveThat();
}
}
答案 2 :(得分:3)
moveThat是一个实例方法。
public class Solver {
void solveIt(){
new CubeGui().moveThat();
}
}
答案 3 :(得分:0)
从您的评论中可以看出,CubeGui是一个只打开一次的摇摆框架,并且您希望获得对该框架的引用以调用moveThat方法。最好的方法是将引用传递给求解器类:
public class Solver {
private CubeGui gui;
public Solver(CubeGui gui) {
this.gui = gui;
}
void solveIt(){
gui.moveThat();
}
}
如果在实践中确实很难,你可以考虑让CubeGui成为一个单身人士(尽管这是不正确的,有时它是有道理的,因为在这种情况下你没有多个框架显示)。为此,您将CubeGui的构造函数设为private,然后将方法添加到CubeGui,如下所示:
private static CubeGui singleInstance;
public static CubeGui getInstance() {
if (singleInstance == null) {
singleInstance = new CubeGui();
}
return singleInstance;
}
然后在你的解算器中你可以做到:
CubeGui.getInstance().moveThat();
我可能会因为建议单身人士而得到一个推特。我甚至应该得到它,但听起来这个问题需要知道它看起来像什么。为了抵消这一点,请参阅here。
因此,如果可能的话,将对象作为参数传递给构造函数或方法。