/*
    这只是程序的一部分,对事件的处理我并没有做,因为在产生frm的时候老是不能将其它的组件add进来。我已经查了很久了,但却没有能够得出结果。这个NullPointerException错误真的弄得我很苦恼,希望各位高手指点一下,帮忙查出错误到底出在哪里,小弟感激不尽....(请不要笑话,我学java没多长时间。虽然我很菜,但我从来没有放弃过努力)
*//*--------
 *用于生成一个窗口并处理各种事件  NullPointerException
 */
 
 import java.awt.*;
 import java.awt.event.*;
 
 class CreatWindow extends Frame {
 
  static Frame frm=new Frame("猜数小游戏"); //实例化一个窗口
 
  Panel enbase = new Panel(new GridLayout(4, 3));// 创建一个四行三列的面板
 
  TextArea txt = new TextArea("", 10, 14, TextArea.SCROLLBARS_VERTICAL_ONLY);//创建一个文本框
 
  Label outbase = new Label("    ", Label.RIGHT); // 创建一个供响应并输出用户按键的面板
 
  Button btn[] = new Button[12];  //初始化输入键盘
 
  public void window() {
 
  frm.setSize(400, 200);// 设置窗口大小
  frm.setVisible(true);// 设置窗口可见
  frm.setResizable(false);// 设置不可改变大小
  frm.setLayout(null);//决定人工排列
  frm.setBackground(Color.yellow);//页面背景颜色
 
  Mouselis mlis = new MouseLis();  //创建MouseLis类的对象
 
  outbase.setBounds(20, 40, 120, 20); //设置输出面板的位置和大小
  outbase.setBackground(new Color(240, 220, 190));//设置输出面板的背景颜色
 
  enbase.setBounds(20, 80, 120, 90);//设置输入面板的位置和大小
 
  for (int i = 1; i <= 9; i++) {
btn[i - 1] = new Button(Integer.toString(i));
enbase.add(btn[i]);
}
btn[10] = new Button("0");
enbase.add(btn[9]);
btn[10] = new Button("退格");
enbase.add(btn[10]);
btn[11] = new Button("确定");
enbase.add(btn[11]);
 
  txt.setBounds(150, 40, 200, 130);//设置文本框的位置和大小
txt.setEditable(false);// 设置文本不可编辑

frm.add(enbase);
frm.add(outbase);
frm.add(txt);
  }
 
  class Mouselis extends MouseAdapter{
  //事件聆听处理
  }
 }
 
 public class TheWindow{
public static void main(String args[]) {
CreatWindow win = new CreatWindow();
win.window();
}
 }

解决方案 »

  1.   

    你把Button btn[]的下标搞错了。
    import java.awt.Button;
    import java.awt.Color;
    import java.awt.Frame;
    import java.awt.GridLayout;
    import java.awt.Label;
    import java.awt.Panel;
    import java.awt.TextArea;
    import java.awt.event.MouseAdapter;public final class TheWindow {
    public static void main(String args[]) {
    CreatWindow win = new CreatWindow();
    win.window();
    }
    }class CreatWindow extends Frame { private static final long serialVersionUID = 1L; static Frame frm = new Frame("猜数小游戏"); // 实例化一个窗口 Panel enbase = new Panel(new GridLayout(4, 3));// 创建一个四行三列的面板 TextArea txt = new TextArea("", 10, 14, TextArea.SCROLLBARS_VERTICAL_ONLY);// 创建一个文本框 Label outbase = new Label("    ", Label.RIGHT); // 创建一个供响应并输出用户按键的面板 Button btn[] = new Button[12]; // 初始化输入键盘 public void window() { frm.setSize(400, 200);// 设置窗口大小
    frm.setVisible(true);// 设置窗口可见
    frm.setResizable(false);// 设置不可改变大小
    frm.setLayout(null);// 决定人工排列
    frm.setBackground(Color.yellow);// 页面背景颜色 // Mouselis mlis = new MouseLis(); // 创建MouseLis类的对象 outbase.setBounds(20, 40, 120, 20); // 设置输出面板的位置和大小
    outbase.setBackground(new Color(240, 220, 190));// 设置输出面板的背景颜色 enbase.setBounds(20, 80, 120, 90);// 设置输入面板的位置和大小 for (int i = 1; i <= 9; i++) {
    btn[i - 1] = new Button(Integer.toString(i));
    enbase.add(btn[i - 1]);
    }
    btn[9] = new Button("0");
    enbase.add(btn[9]);
    btn[10] = new Button("退格");
    enbase.add(btn[10]);
    btn[11] = new Button("确定");
    enbase.add(btn[11]); txt.setBounds(150, 40, 200, 130);// 设置文本框的位置和大小
    txt.setEditable(false);// 设置文本不可编辑 frm.add(enbase);
    frm.add(outbase);
    frm.add(txt);
    } class Mouselis extends MouseAdapter {
    // 事件聆听处理
    }
    }
      

  2.   


    习惯不好啊。。
    for (int i = 1; i  <= 9; i++) { 
        btn[i - 1] = new Button(Integer.toString(i)); 
        enbase.add(btn[i]); 
    } //改成如下:for (int i = 0; i  < btn.length - 3; i++) { 
       Button button = new Button(Integer.toString(i)); 
       btn[i] = button;
       enbase.add(button ); 
    } 以上仅供参考。