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

Java 需要帮助找出发生此错误的原因吗,java,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.s

我的代码是:

 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);
      }
  }
}
import javax.swing.*;
导入java.awt.*;
导入java.awt.event.*;
导入java.awt.Font;
导入java.awt.Graphics;
导入java.net.URL;
公共类DrawScreen扩展了JPanel{
字符串picPath=“pictures/”;
ClassLoader cl=pokemonchromewplayerscreen.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();
图像imgBG、imgDialog、imgProfessor;
公共无效imgImport(){
imgBG=tk.createImage(imgURL);
imgDialog=tk.createImage(imgURL2);
imgProfessor=tk.createImage(imgURL3);
}
公共组件(图形g){
g、 设置颜色(颜色为黑色);
图形2d g2=(图形2d)g;
对于(int x=0;x
应该是

public static void main(String[ ] args){
没有适当的
main
-方法声明,就没有JVM的入口点

话虽如此,您的“main”中当前的代码似乎真的应该在类的构造函数中,而且您可能打算在
main
-方法中创建类的实例

应该是

public static void main(String[ ] args){
没有适当的
main
-方法声明,就没有JVM的入口点


话虽如此,您的“main”中当前的代码似乎真的应该在类的构造函数中-而且您可能打算在
main
-方法中创建类的实例。

您的
main
方法当前没有作为entry方法运行。它应该定义为
static

  public static void main(String[ ] args){

您的
main
方法当前的行为与输入方法不同。应将其定义为
static
,即

  public static void main(String[ ] args){

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

这:

public void main(String[ ] args){

}  
实际上应该是:

public static void main(String[ ] args){

}  
…当然,这意味着
参考不再有效-您需要首先实际创建
ChromePlayerScreen

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);
}  

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

这:

public void main(String[ ] args){

}  
实际上应该是:

public static void main(String[ ] args){

}  
…当然,这意味着
参考不再有效-您需要首先实际创建
ChromePlayerScreen

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);
}  

您的主机不是静态的,请更换此主机:

public void main(String[] args) 
据此:

public static void main(String[] args)

您的主机不是静态的,请更换此主机:

public void main(String[] args) 
据此:

public static void main(String[] args)


我的一个朋友告诉我,当在java中调用,该类从未被实例化过,因此任何类成员都将为null。由于您不在对象的特定实例中,因此没有“this”。您如何运行您的程序?它是编译的,错误发生在我运行它时@Code Guru确定我会编辑原始问题我的一个朋友告诉我的当主在java中调用,该类从未被实例化过,因此任何类成员都将为null。而且,由于您不在对象的特定实例中,因此不存在“this”。您如何运行您的程序?它是编译的,错误发生在我运行它时@Code Guru。它说,如果我设置为static,我肯定会编辑原始问题“非静态变量这不能从静态上下文引用”@exike请看我答案的最后一句。对不起,我不明白你的意思?我真的不知道这个词如果我使用静态,它会说“非静态变量这不能从静态上下文引用”"@Exikle看到我答案的最后一句了。对不起,我不明白你的意思?我真的不知道这个词,但现在我不能添加dPnl,它说的是非静态变量这不能从静态上下文引用好吧,我只是做了一些你做的事情,并将声明移到main中,它起作用了,谢谢!这起作用了,但现在我不能添加dPnl,它说非静态变量这不能从静态上下文引用。我只是做了一些你做的事情,将声明移到了main中,它成功了,谢谢!