我无法在main方法中调用repaint()方法

时间:2015-03-16 20:00:14

标签: java

每当我尝试调用repaint()方法时,它表示非静态方法不能从静态方法引用。顺便说一句,它与paintComponent方法在同一个类中。我试图先从类中创建一个对象,然后用对象名称引用它,但它也没有用。请帮忙。

public class P extends JPanel {

P g = new P();
boolean change = true;
static int x = 0;
static int y = 0;
static Color CircleC = new Color(0, 0, 0);
static String position = "";
P p = new P();

public void paintComponent(Graphics g) {
    g.setColor(CircleC);
    g.fillOval(x, y, 50, 50);
    g.setColor(Color.WHITE);
    g.drawString(position, x, y + 25);

}



public static void main(String[] args) throws InterruptedException {
p.repaint();

}

}

2 个答案:

答案 0 :(得分:3)

主要方法是静态的。您的p对象不是:它是P类的实例字段。试试这个:

public static void main(String[] args) throw InterruptedException {
    EventQueue.invokeLater( new Runnable() {
        public void run() {
            P p = new P();
            p.repaint();
        }
    } );
}

您应该始终从事件派发线程访问Swing组件,这就是我将它全部放在EventQueue invokeLater中的原因。

答案 1 :(得分:0)

你不能从main()调用它,因为你不能在静态方法(main())中调用非静态函数(repaint())或使用非静态变量。

而是使主类实现Runnable并使用线程:

Thread repaintThread = new Thread("some_name", this); // \
public void run(){                                    // |
   while(true){                                       // >-Theese shall be in the main class
       repaint();                                     // |
   }                                                  // |
}                                                     // /
repaintThread.start();    //this shall be in main()