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);
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);
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
}
}
JFrame.setVisible(true);
Firstwindow.java:142是new Firstwindow();
它提示的这些是什么意思呢?