当没有问题时,无法从静态上下文中加入编译器抛出非静态方法

Dav*_*son 1 java swing compiler-errors

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

好吧,这没有任何意义.当我尝试编译时,我得到了

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
Run Code Online (Sandbox Code Playgroud)

我显然不是在静态环境中运行,所以我不知道发生了什么.任何帮助真诚地感谢!

Mat*_*hen 6

这些是实例方法,因此您需要在对象而不是类上调用它们.

frame.getContentPane().add(panel);
// ...
g.drawOval(rand.nextInt(scrWidth), rand.nextInt(scrHeight),40,40);
Run Code Online (Sandbox Code Playgroud)