Exception in thread "main" java.lang.NullPointerException
at Firstwindow.<init>(Firstwindow.java:56)
at Firstwindow.main(Firstwindow.java:142)
Firstwindow.java:56是southPanel.add(fractionLabel1);
Firstwindow.java:142是new Firstwindow();
以下是主类。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
import javax.swing.JCheckBox;
public class Firstwindow extends JFrame implements ActionListener,WindowListener,Runnable
{
JFrame mainframe;//主面板
Container thisContainer;int success=0;
JMenuBar menubar;
JPanel centerPanel,southPanel;//子面板
JButton diamondsButton[][]=new JButton[6][5];//游戏按钮数组
JLabel fractionLabel1=new JLabel("时间",JLabel.LEFT);//时间标签
JLabel fractionLabel2=new JLabel("得分",JLabel.RIGHT);//分数标签
JTextField showusedtime;
JTextField score;
Thread hintthread;
javax.swing.Timer timer;
int usedtime=0;
JButton firstButton,secondButton;//分别记录两次被选中的按钮
int grid[][]=new int[8][7];//存储游戏的按钮位置
static boolean pressInformation=false;//判断是否有按钮被选中
int x0=0,y0=0,x=0,y=0,firstMsg=0,secondMsg=0,validateLV;//游戏按钮的位置坐标
int i,j,k,n,m,p;//消除方法控制MenuBar menubar;
JMenu menu1,menu2;
JMenuItem item1,item2,item3,item4,item5,item6,item7;
MyDialog dialog;
Firstwindow(){
mainframe=new JFrame("连连看");
menubar=new JMenuBar();
menu1=new JMenu("游戏(G)");
menu2=new JMenu("帮助(H)");
item1=new JMenuItem("新游戏(N)");
item2=new JMenuItem("提示(H)     H");
item3=new JMenuItem("统计信息(S) F4");
item4=new JMenuItem("选项(O)     F5");
item5=new JMenuItem("退出(X)       ");
item6=new JMenuItem("重置(R)     F6");
item7=new JMenuItem("暂停(K)     F7");
showusedtime=new JTextField(8);
//score=new JTextField(8);
showusedtime.setEditable(false);
showusedtime.setHorizontalAlignment(JTextField.CENTER);
hintthread=new Thread(this);

解决方案 »

  1.   

    timer=new javax.swing.Timer(1000,this);
    item1.addActionListener(this);
    item2.addActionListener(this);
    item3.addActionListener(this);
    item4.addActionListener(this);
    item5.addActionListener(this);
    item6.addActionListener(this);
    item7.addActionListener(this);
    menu1.add(item1);menu1.add(item2);menu1.add(item6);
    menu1.add(item3);menu1.add(item4);menu1.add(item5);menu1.add(item7);
    southPanel.add(fractionLabel1);
    southPanel.add(showusedtime);
    southPanel.add(fractionLabel2);
    southPanel.add(score);
    dialog=new MyDialog();
    addWindowListener(new WindowAdapter()
    {public void windowClosing(WindowEvent e)
    {System.exit(0);
    }
    });
    thisContainer.add(menubar);
    thisContainer.add(centerPanel);
    thisContainer.add(southPanel);
    thisContainer.setBounds(200,200,200,200);
        thisContainer.setVisible(true);
        thisContainer.validate();
    }
    public void actionPerformed(ActionEvent e){
    if(e.getSource()==item1){
    int grid[][]=new int[8][7];
    this.grid=grid;
    randomBuild();
    //mainFrame.setVisible(false);
    pressInformation=true;
    init();
    if(pressInformation=true){
    try{
    usedtime++;
    for(int i=0;i<m;i++){
    for(int j=0;j<p;j++){
    if(success==(m*p)/2){
    timer.stop();
    //showusedtime.setText(usedtime);
       }
    }
    }
    }
    catch(IllegalThreadStateException ex){}
    }
    if(e.getSource()==timer){
    showusedtime.setText("您的用时是"+showusedtime+"秒");
    }
    //提示的功能有待完善if(e.getSource()==item2){}
    if(e.getSource()==item3){
    //class Memory extends JFrame implements ActionListener(){

    //}
    }
    if(e.getSource()==item6){
    reload();
    }
    if(e.getSource()==item7){
    timer.stop();
    //save();
    }
    if(e.getSource()==item4){
    dialog.setVisible(true);
    dialog.fanhui();
    if(dialog.fanhui()==1 && dialog.fanhuizhi()==1){
    m=6;p=5;
    }
    if(dialog.fanhui()==1 && dialog.fanhuizhi()==2){
    m=7;p=6;
    }
    if(dialog.fanhui()==1 && dialog.fanhuizhi()==3){
    m=8;p=7;
    }
    if(dialog.fanhui()==2 && dialog.fanhuizhi()==1){

    }
    if(dialog.fanhui()==2 && dialog.fanhuizhi()==2){

    }
    if(dialog.fanhui()==2 && dialog.fanhuizhi()==3){

    }
    init();
    }
    if(e.getSource()==item5){
    System.exit(0);
       }
    }
    }
    public static void main(String[] args){
    new Firstwindow();
    }
    public void init(){
    thisContainer=mainframe.getContentPane();
    thisContainer.setLayout(new BorderLayout());
    centerPanel=new JPanel();
    southPanel=new JPanel();
    thisContainer.add(centerPanel,"Center");
    thisContainer.add(southPanel,"South");
    //dialog.MyDialog();
    centerPanel.setLayout(new GridLayout(m,n));
    //if(){}
    /*for(int cols=0;cols<m;cols++){
    for(int rows=0;rows<k;rows++){
    diamondsButton[cols][rows]=new JButton(String.valueOf(grid[cols+1][rows+1]));
    diamondsButton[cols][rows].addActionListener(this);
    centerPanel.add(diamondsButton[cols][rows]);
    }
    }*/
    }public void reload(){
    int save[]=new int[30];
    int n=0,cols,rows;
    int grid[][]=new int[8][7];
    for(int i=0;i<=m;i++){
    for(int j=0;j<=p;j++){
    if(this.grid[i][j]!=0){
    save[n]=this.grid[i][j];
    n++;
    }
    }
    }
    n=n-1;
    this.grid=grid;
    while(n>=0){
    cols=(int)(Math.random()*6+1);
    rows=(int)(Math.random()*5+1);
    while(grid[cols][rows]!=0){
    cols=(int)(Math.random()*6+1);
    rows=(int)(Math.random()*5+1);
    }
    this.grid[cols][rows]=save[n];
    n--;
    }
    mainframe.setVisible(true);//进行过状态的改变
    pressInformation=false;//这里一定要将按钮点击信息归为初始
    init();
    for(int i=0;i<m;i++){
    for(int j=0;j<k;j++){
    if(grid[i+1][j+1]==0){diamondsButton[i][j].setVisible(false);success++;}
    }
    }
    }
    public void randomBuild(){
    int randoms,cols,rows;
    for(int twins=-1;twins<=15;twins++){
    randoms=(int)(Math.random()*20+1);
    for(int alike=1;alike<=2;alike++){
    cols=(int)(Math.random()*6+1);
    rows=(int)(Math.random()*5+1);
    while(grid[cols][rows]!=0){
    cols=(int)(Math.random()*6+1);
    rows=(int)(Math.random()*5+1);
    }
    this.grid[cols][rows]=randoms;
    }
    }
    }
    public void fraction(){
    fractionLabel1.setText(String.valueOf(Integer.parseInt(fractionLabel1.getText())+100));
    fractionLabel2.setText(String.valueOf(Integer.parseInt(fractionLabel2.getText())+100));
    }
    public void estimateEven(int placeX,int placeY,JButton bz){
    if(pressInformation==false){
    x=placeX;
    y=placeY;
    secondMsg=grid[x][y];
    secondButton=bz;
    pressInformation=true;
    }
    else{
    x0=x;y0=y;firstMsg=secondMsg;
    firstButton=secondButton;
    x=placeX;
    y=placeY;
    secondMsg=grid[x][y];
    secondButton=bz;
    if(firstMsg==secondMsg && secondButton!=firstButton){
    xiao();
    }
    }
    }
    public void xiao(){ //相同的情况下能不能消去。仔细分析,不一条条注释 
    if((x0==x &&(y0==y+1||y0==y-1)) || ((x0==x+1||x0==x-1)&&(y0==y))){ //判断是否相邻 
    remove(); 

    else{ 
    for (j=0;j<7;j++ ) { //此处的P应为原来的7
    if (grid[x0][j]==0){ //判断第一个按钮同行哪个按钮为空 
    if (y>j) { //如果第二个按钮的Y坐标大于空按钮的Y坐标说明第一按钮在第二按钮左边 
    for (i=y-1;i>=j;i-- ){ //判断第二按钮左侧直到第一按钮中间有没有按钮 
    if (grid[x][i]!=0) { 
    k=0; 
    break; 

    else{ k=1; } //K=1说明通过了第一次验证 

    if (k==1) { 
    linePassOne(); 


    if (y<j){ //如果第二个按钮的Y坐标小于空按钮的Y坐标说明第一按钮在第二按钮右边 
    for (i=y+1;i<=j ;i++ ){ //判断第二按钮左侧直到第一按钮中间有没有按钮 
    if (grid[x][i]!=0){ 
    k=0; 
    break; 

    else { k=1; } 

    if (k==1){ 
    linePassOne(); 


    if (y==j ) { 
    linePassOne(); 


    if (k==2) { 
    if (x0==x) { 
    remove(); 

    if (x0<x) { 
    for (n=x0;n<=x-1;n++ ) { 
    if (grid[n][j]!=0) { 
    k=0; 
    break; 

    if(grid[n][j]==0 && n==x-1) { 
    remove(); 



    if (x0>x) { 
    for (n=x0;n>=x+1 ;n-- ) { 
    if (grid[n][j]!=0) { 
    k=0; 
    break; 

    if(grid[n][j]==0 && n==x+1) { 
    remove(); 





    for (i=0;i<8;i++ ) { //列 
    if (grid[i][y0]==0) { 
    if (x>i) { 
    for (j=x-1;j>=i ;j-- ) { 
    if (grid[j][y]!=0) { 
    k=0; 
    break; 

    else { k=1; } 

    if (k==1) { 
    rowPassOne(); 


    if (x<i) { 
    for (j=x+1;j<=i;j++ ) { 
    if (grid[j][y]!=0) { 
    k=0; 
    break; 

    else { k=1; } 

    if (k==1) { 
    rowPassOne(); 


    if (x==i) { 
    rowPassOne(); 


    if (k==2){ 
    if (y0==y) { 
    remove(); 

    if (y0<y) { 
    for (n=y0;n<=y-1 ;n++ ) { 
    if (grid[i][n]!=0) { 
    k=0; 
    break; 

    if(grid[i][n]==0 && n==y-1) { 
    remove(); 



    if (y0>y) { 
    for (n=y0;n>=y+1 ;n--) { 
    if (grid[i][n]!=0) { 
    k=0; 
    break; 

    if(grid[i][n]==0 && n==y+1) { 
    remove(); 






    }
    public void remove(){
    firstButton.setVisible(false);
    secondButton.setVisible(false);
    fraction();
    pressInformation=false;
    k=0;grid[x0][y0]=0;
    grid[x][y]=0;
    }
    public void linePassOne(){
    if(y0>j){//第一个按钮同行空按钮在左边
       for(i=y0-1;i>=j;i--){//判断第一按钮同左侧空按钮之间有没按钮
       if(grid[x0][i]!=0){
       k=0;break;
       }
       else{k=2;}//说明通过了第二次验证
       }
    }
    if(y0<j){//第一按钮同行空按钮在第二个按钮之间
    for(i=y0+1;i<=j;i++){
    if(grid[x0][i]!=0){
    k=0;
    break;
    }
    else{k=2;}//表明通过了第二次验证
    }
    }
    }
    public void rowPassOne(){ 
    if (x0>i) { 
    for (j=x0-1;j>=i ;j-- ) { 
    if (grid[j][y0]!=0) { 
    k=0; 
    break; 

    else { k=2; } 


    if (x0<i) { 
    for (j=x0+1;j<=i ;j++ ) { 
    if (grid[j][y0]!=0) { 
    k=0; 
    break; 

    else { k=2; } 


    }
    //public void save(){

    //}
    @Override
    public void windowActivated(WindowEvent arg0) {
    // TODO Auto-generated method stub

    }
    @Override
    public void windowClosed(WindowEvent arg0) {
    // TODO Auto-generated method stub

    }
    @Override
    public void windowDeactivated(WindowEvent arg0) {
    // TODO Auto-generated method stub

    }
    @Override
    public void windowDeiconified(WindowEvent arg0) {
    // TODO Auto-generated method stub

    }
    @Override
    public void windowIconified(WindowEvent arg0) {
    // TODO Auto-generated method stub

    }
    @Override
    public void windowOpened(WindowEvent arg0) {
    // TODO Auto-generated method stub

    }
    @Override
    public void windowClosing(WindowEvent arg0) {
    // TODO Auto-generated method stub

    }
    @Override
    public void run() {
    // TODO Auto-generated method stub

    }
    }
      

  2.   

    你這幾段代碼太長了。
    JFrame.setVisible(true);
      

  3.   

    Firstwindow.java:56是southPanel.add(fractionLabel1);
    Firstwindow.java:142是new Firstwindow();
    它提示的这些是什么意思呢?
      

  4.   

    应该吧程序打包上传,这样贴出来看不明白,swing这东西没什么复杂的。