1

こんにちは、文字 x を 1 ~ 4 行目に表示し、文字 y を 7 ~ 10 行目に表示しようとしています。何らかの理由で、else ifの代わりにelseを置くと機能します.1〜4行を除くすべての行が「y」になります。それはelse readをマークし、このトークンを削除するように言い、Null Pointer Exceptionを言い、frame.addのある行の26行目にエラーが発生します

import java.awt.Color;
import java.awt.GridLayout;
import java.util.Random;
import java.util.Scanner;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
public class ButtonGrid {
    JFrame frame=new JFrame();
    JButton[][] grid;
    public ButtonGrid(int width, int length){
        Random r=new Random();
        int w=r.nextInt(13-1)+1;
        frame.setLayout(new GridLayout(width,length));
        grid=new JButton[width][length];
        Scanner g = new Scanner(System.in);
        for(int y=0;y<length;y++){
            for(int x=0;x<width;x++){
                if (y < 4) {
                    grid[x][y]=new JButton("x");-I am trying to set lines 1-4 to x
                }
                else if (y>7){ 
                    grid[x][y]=new JButton("y");-I am trying to set lines 7-10 to y
                }
                frame.add(grid[x][y]);
                else{ "IT MARKS THIS AS WRONG"
                    grid[x][y]=new JButton(" ");
                }
            }
        }
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);``
    }
    public static void main(String[] args) {
        new ButtonGrid(10,10);

    }
}

私はすべてを正しく行っていると思いますが、Eclipse でこれらのエラーが発生する理由がわかりません。助けてください!最終的には 7 行目から 10 行目に入力する予定ですが、このテストはうまくいきませんでした。誰かが私を助ける方法を知っているなら、私はSwingでボードゲームStrategoをやっています。

4

4 に答える 4

0

else投稿したコードはコンパイルされず、ダングリングブロックがあるため NullPointerException が生成されません。

frame.add(grid[x][y]);
else{ // *** this else block is not associated with any if block***
  grid[x][y]=new JButton(" ");
}

エラーの原因となっているコードのみを投稿するか、投稿されたコードの実際のエラーを説明します。

于 2013-09-13T01:09:17.353 に答える
0

この 1 行のコードが間違った場所にありました。

frame.add(grid[x][y]); // <<<<<<<<<<<<< This line should be here <<<<<<<<<<

これがあなたのリスト全体です。未使用のコードをコメントアウトしましたが、主なことは、上記のコード行が間違った場所にあったことです。

さらに質問がある場合は、喜んでご指導いたします。私のメール アドレスは kaydell@yahoo.com です。

// Not used: import java.awt.Color;

import java.awt.GridLayout;
// Not Used: import java.util.Random;
// Not Used: import java.util.Scanner;

import javax.swing.JButton;
import javax.swing.JFrame;
// Not used: import javax.swing.JTextField;

public class ButtonGrid {
    JFrame frame=new JFrame();
    JButton[][] grid;
    public ButtonGrid(int width, int length){
        // Not Used: Random r=new Random();
        // Not Used: int w=r.nextInt(13-1)+1;
        frame.setLayout(new GridLayout(width,length));
        grid=new JButton[width][length];
        // Not Used: Scanner g = new Scanner(System.in);
        for(int y=0;y<length;y++){
            for(int x=0;x<width;x++){
                if (y < 4) {
                    grid[x][y]=new JButton("x"); // -I am trying to set lines 1-4 to x
                }
                else if (y>7){ 
                    grid[x][y]=new JButton("y"); // -I am trying to set lines 7-10 to y
                }
                else { // "IT MARKS THIS AS WRONG"
                    grid[x][y]=new JButton(" ");
                }
                frame.add(grid[x][y]); // <<<<<<<<<<<<< This line should be here <<<<<<<<<<
            }
        }
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true); // ``
    }
    public static void main(String[] args) {
        new ButtonGrid(10,10);

    }
}
于 2013-09-13T18:00:17.230 に答える