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

これはあなたの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 に答える
1
public void main(String[ ] args){

する必要があります

public static void main(String[ ] args){

適切な -method 宣言がなければmain、JVM のエントリ ポイントはありません。

そうは言っても、現在「メイン」にあるコードは実際にはクラスのコンストラクターにある必要があるように見えます-そして、おそらく-メソッドでクラスのインスタンスを作成するつもりだったようですmain

于 2012-12-07T22:58:22.313 に答える
1

あなたのmainメソッドは現在、エントリ メソッドとして動作していません。static次のように定義する必要があります。

  public static void main(String[ ] args){
于 2012-12-07T22:58:32.130 に答える
0

メインは静的ではありません。これを置き換えてください:

public void main(String[] args) 

これで :

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