无法从静态上下文错误中引用非静态方法

时间:2013-09-17 16:43:25

标签: java algorithm compiler-construction static compiler-errors

我有一个名为sagum的类,它有一个方法名称paint

public void paint(Graphics g) {

    int[] apw1 = null;
    int n1 = 0;
    for (int j = 1; j <= n1; j++) {
        g.drawRect(50, 50, (apw1[j] * 20), 30);
        String[] p = null;
        g.drawString("p" + p[j - 1], (55 + (apw1[j - 1] * 20)), 70);
        g.drawString("" + apw1[j - 1], 50 + (apw1[j - 1] * 20), 100);
    }
    g.drawString("" + apw1[n1], 50 + (apw1[n1] * 20), 100);

}

我试图称之为

n1=count+1; 
paint(g);

我即将收到错误

non-static method paint(Graphics) cannot be referenced from a static context

我只是在执行一个方法后尝试调用它来执行我的方法(调度算法)的图形应用程序。

请帮助

2 个答案:

答案 0 :(得分:1)

您不应该直接调用paint(...)方法,因此您的错误虽然很重要(请参阅this link),但却不是问题。您需要重新构建程序,以便不觉得有必要进行此调用。大多数Swing和AWT应用程序通过更改类属性然后在呈现的组件上调用repaint()来执行“被动”绘制时效果最佳,以便建议JVM重新绘制它。

答案 1 :(得分:0)

此编译器错误意味着您尝试调用实例方法,但尚未指定实例。

您需要sagum类的实例,并在其上调用paint()方法,如下所示:

sagum s = new sagum();
...
s.paint(g);
...

如果从同一实例中的另一个实例方法调用实例方法,则可以显式使用this来指示实例,或者可以完全不将它保留,并隐含this。< / p>

但是,在这种特定情况下,others have indicated,不应该直接绘画。编写程序,以便Swing(或AWT或JavaFX)管理绘画计划。