需要帮助找出发生此错误的原因

时间:2012-12-07 22:53:59

标签: java

我的代码是:

 import javax.swing.*;
 import java.awt.*;
 import java.awt.event.*;
 import java.awt.Font;
 import java.awt.Graphics;
 import java.net.URL;
 import java.awt.event.KeyAdapter;
 import java.awt.event.KeyEvent;
 import java.io.*;
 import javax.swing.Timer;

 public class chromeNPlayerScreen extends JFrame implements ActionListener{
   DrawScreen dPnl = new DrawScreen(); 
   public void actionPerformed(ActionEvent e){
   }
   public void main(String[ ] args){
     this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
     this.add(dPnl);
     this.setSize(600,600);;
     this.setVisible(true);
     this.setResizable(false);
     this.setLocation(200, 200);
   }  
 }

但是当我跑的时候.....

 java.lang.NullPointerException
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
   at java.lang.reflect.Method.invoke(Unknown Source)
   at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)

有人可以向我解释为什么这不起作用吗?

DrawScreen代码是

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.Font;
import java.awt.Graphics;
import java.net.URL;

public class DrawScreen extends JPanel {
  String picPath = "pictures/";
  ClassLoader cl = pokemonChromeNewPlayerScreen.class.getClassLoader();
  URL imgURL = cl.getResource(picPath+"welcomeBG.png"),imgURL2 = cl.getResource(picPath+"dialogBox.png"),
    imgURL3 = cl.getResource(picPath+"Professor.png");
  Toolkit tk = Toolkit.getDefaultToolkit();
  Image imgBG, imgDialog, imgProfessor;

  public void imgImport(){
    imgBG = tk.createImage(imgURL);
    imgDialog = tk.createImage(imgURL2);
    imgProfessor = tk.createImage(imgURL3);
  }
  public void paintComponent(Graphics g) {
      g.setColor(Color.BLACK);
      Graphics2D g2 = (Graphics2D)g;
      for(int x=0;x<=600;x+=25){
        g2.drawLine(x,0,x,600);
        g2.drawString(""+x,x+5,20);
      }
      for(int y=0;y<=600;y+=25){
        g2.drawLine(0,y,600,y);
        g2.drawString(" "+y,0,y+20);
      }
  }
}

这是DrawScreen的代码,atm所有它拖动网格,但那是因为我刚开始它并想要不同位置的x,y值

4 个答案:

答案 0 :(得分:1)

public void main(String[ ] args){

应该是

public static void main(String[ ] args){

没有适当的main - 方法声明,JVM没有入口点。

说完这个,看起来你的'main'中的代码应该真的在你的类的构造函数中 - 看起来你可能想在main中创建一个类的实例 - 方法

答案 1 :(得分:1)

您的main方法当前不是输入法。它应该被定义为static

  public static void main(String[ ] args){

答案 2 :(得分:1)

我认为这与您的IDE有关。具体来说,它正在寻找main()非静态版本。

这:

public void main(String[ ] args){

}  

实际应该是:

public static void main(String[ ] args){

}  

...当然,这意味着this引用不再有效 - 您需要先实际创建chromeNPlayerScreen

public static void main(String[ ] args){
   chromeNPlayerScreen screen = new chromeNPlayerScreen();
   screen.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
   screen.add(dPnl);
   screen.setSize(600,600);;
   screen.setVisible(true);
   screen.setResizable(false);
   screen.setLocation(200, 200);
}  

答案 3 :(得分:0)

你的主要不是静态的,取而代之的是:

public void main(String[] args) 

由此:

public static void main(String[] args)