0

我的代码是这样的:

 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的代码,它所做的一切都是拖动一个网格,但那是因为我刚刚启动它并想要不同位置的x,y值

4

4 回答 4

1
public void main(String[ ] args){

应该

public static void main(String[ ] args){

如果没有适当的main-method 声明,JVM 就没有入口点。

话虽如此,看起来你的“main”中的代码确实应该在你的类的构造函数中——看起来你可能打算在 - 方法中创建你的类的实例main

于 2012-12-07T22:58:22.313 回答
1

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

  public static void main(String[ ] args){
于 2012-12-07T22:58:32.130 回答
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);
}  
于 2012-12-07T23:02:50.470 回答
0

你的 main 不是 static ,替换这个:

public void main(String[] args) 

这样 :

public static void main(String[] args)
于 2012-12-07T23:04:43.580 回答