代码之家  ›  专栏  ›  技术社区  ›  David Watson

如果没有问题,则无法从静态上下文访问编译器抛出的非静态方法

  •  1
  • David Watson  · 技术社区  · 14 年前
    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 回复  |  直到 14 年前
        1
  •  6
  •   Matthew Flaschen    14 年前

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

    frame.getContentPane().add(panel);
    // ...
    g.drawOval(rand.nextInt(scrWidth), rand.nextInt(scrHeight),40,40);