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中,它成功了,谢谢!