-1

我有一个名为 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

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

请帮忙

4

2 回答 2

1

您不应该paint(...)直接调用该方法,因此您的错误虽然很重要,但需要理解(请参阅此链接),这不是问题。你需要重新构建你的程序,这样你就不会觉得你有必要进行这个调用。大多数 Swing 和 AWT 应用程序通过让您更改类属性然后调用repaint()呈现的组件来执行“被动”绘图来工作,以便建议 JVM 重新绘制它。

于 2013-09-17T16:52:23.693 回答
0

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

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

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

如果您从同一个实例中的另一个实例方法调用一个实例方法,您可以显式地使用this来指示该实例,或者您可以完全省略它并this隐含。

但是,正如其他人所指出的那样,在这种特定情况下,您不应该直接绘画。编写程序,以便 Swing(或 AWT 或 JavaFX)管理绘制计划。

于 2013-09-17T16:45:11.960 回答