Нестатический метод броска компилятором не может быть принят из статического контекста, когда нет проблем - PullRequest
1 голос
/ 05 сентября 2010
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Color;
import java.util.Random;

public class dots {
    public dots() {
        init();
    }
    public void init() {
        JFrame frame = new JFrame("Dots");
        frame.setExtendedState(Frame.MAXIMIZED_BOTH);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel panel = new JPanel();
        int scrWidth = (int) frame.getSize().getWidth();
        int scrHeight = (int) frame.getSize().getHeight();
        JFrame.getContentPane().add(panel);
        Random rand = new Random();
        Graphics g = panel.getGraphics();
        for (int i = 0; i < 18; i++) {
            g.setColor(i < 12 ? Color.YELLOW : Color.BLUE);
            g.drawOval(Random.nextInt(scrWidth),Random.nextInt(scrHeight),40,40);
        }
        frame.setVisible(true);
    }
    public static void main(String[] args) {
        dots d = new dots();
    }
}

Хорошо, это не имеет смысла. Когда я пытаюсь скомпилировать это, я получаю

dots.java:19: non-static method getContentPane() cannot be referenced from a sta
tic context
                JFrame.getContentPane().add(panel);
                      ^
dots.java:24: non-static method nextInt(int) cannot be referenced from a static
context
                        g.drawOval(Random.nextInt(scrWidth),Random.nextInt(scrHe
ight),40,40);
                                         ^
dots.java:24: non-static method nextInt(int) cannot be referenced from a static
context
                        g.drawOval(Random.nextInt(scrWidth),Random.nextInt(scrHe
ight),40,40);
                                                                  ^
3 errors

Я явно не работаю в статическом контексте, поэтому понятия не имею, что происходит. Любая помощь искренне ценится!

1 Ответ

6 голосов
/ 05 сентября 2010

Это методы экземпляра, поэтому их нужно вызывать для объектов, а не для класса.

frame.getContentPane().add(panel);
// ...
g.drawOval(rand.nextInt(scrWidth), rand.nextInt(scrHeight),40,40);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...