原代码是:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;class MainWindow extends Frame
implements ActionListener
{
int Num,Speed,Count,Time; //盘子移动 模拟 标签
Label labelMove[][]=new Label[4][12];
int isVisibleA[],isVisibleB[],isVisibleC[];
int row_a,row_b,length;
//菜单
MenuBar menubar;
Menu menu;
MenuItem menuitem;
//控制区pControl 内 标签、文本域
Label labelNum,labelSpeed,labelCount,labelTime;
TextField textNum,textSpeed,textCount,textTime;
Button buttonEnter;
//显示区pDisplay 内 标签##################################################################
//Label labelA,labelB,labelC;
// 显示区 和 控制区
Panel pDisplay;
Panel pControl;
MainWindow()
{
FlowLayout flow=new FlowLayout();
//菜单
menubar=new MenuBar();
menu=new Menu("文件");
menuitem=new MenuItem("退出");
menuitem.setShortcut(new MenuShortcut(KeyEvent.VK_E));
menu.add(menuitem);
menubar.add(menu);
setMenuBar(menubar);
menuitem.addActionListener(this);
//控制区pControl 内 标签、文本域
labelNum=new Label("盘子数量:");
textNum=new TextField(5);
labelSpeed=new Label("移动速度:");
textSpeed=new TextField(5);
labelCount=new Label("移动次数:");
textCount=new TextField(5);
labelTime=new Label("移动时间:");
textTime=new TextField(5);
buttonEnter=new Button("确定");
buttonEnter.addActionListener(this);
// 控制区
pControl=new Panel();
pControl.setBackground(Color.cyan);
pControl.add(labelNum);
pControl.add(textNum);
pControl.add(labelSpeed);
pControl.add(textSpeed);
pControl.add(labelCount);
pControl.add(textCount);
pControl.add(labelTime);
pControl.add(textTime);
pControl.add(buttonEnter);
add(pControl,BorderLayout.NORTH);
//显示区pDisplay 内 标签
// labelA=new Label("A",Label.CENTER);
// labelB=new Label("B",Label.CENTER);
// labelC=new Label("C",Label.CENTER);
// labelA.setBackground(Color.red);
// labelB.setBackground(Color.yellow);
// labelC.setBackground(Color.blue);
// labelA.setPreferredSize(new Dimension(200,20));
// labelB.setPreferredSize(new Dimension(200,20));
// labelC.setPreferredSize(new Dimension(200,20));
// 显示区
pDisplay=new Panel();
pDisplay.setBounds(0, 0, 800, 500);
pDisplay.setBackground(Color.gray);
// pDisplay.add(labelA);
// pDisplay.add(labelB);
// pDisplay.add(labelC);
add(pDisplay,BorderLayout.CENTER);
setBounds(100,100,800,600);
setVisible(true);
validate();
}
void moveDisplay(int a,int b)
{
//System.out.println(a+"----->"+b+"\n");
switch(a)
{
case 1:
for(int i=0;i<4;i++)
{
if(isVisibleA[i]>0)
{
row_a=i;
length=isVisibleA[row_a];
break;
}
}
for(int i=0;i<length;i++)
{
labelMove[row_a][i].setVisible(false);
}
isVisibleA[row_a]=0;
break;
case 2:
for(int i=0;i<4;i++)
{
if(isVisibleB[i]>0)
{
row_a=i;
length=isVisibleB[row_a];
break;
}
}
for(int i=0;i<length;i++)
{
labelMove[row_a][4+i].setVisible(false);
}
isVisibleB[row_a]=0;
break;
case 3:
for(int i=0;i<4;i++)
{
if(isVisibleC[i]>0)
{
row_a=i;
length=isVisibleC[row_a];
break;
}
}
for(int i=0;i<length;i++)
{
labelMove[row_a][8+i].setVisible(false);
}
isVisibleC[row_a]=0;
break;
}
switch(b)
{
case 2:
for(int i=0;i<4;i++)
{
if(isVisibleB[i]>0)
{
row_b=i;
break;
}
}
row_b=row_b-1;
for(int i=0;i<length;i++)
{
labelMove[row_b][4+i].setVisible(true);
}
isVisibleA[row_b]=length;
break;
case 1:
for(int i=0;i<4;i++)
{
if(isVisibleA[i]>0)
{
row_b=i;
break;
}
}
row_b=row_b-1;
for(int i=0;i<length;i++)
{
labelMove[row_b][i].setVisible(true);
}
isVisibleA[row_b]=length;
break;
case 3:
for(int i=0;i<4;i++)
{
if(isVisibleB[i]>0)
{
row_b=i;
break;
}
}
row_b=row_b-1;
for(int i=0;i<length;i++)
{
labelMove[row_b][8+i].setVisible(true);
}
isVisibleA[row_b]=length;
break;
}
}
void hanoi(int n,int a,int b,int c)
{
if(n==1)
{
moveDisplay(a,c);
}
else
{
hanoi(n-1,a,c,b);
moveDisplay(a,c);
hanoi(n-1,b,a,c);
}
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==menuitem) //菜单 退出
{
System.exit(0);
}
else if(e.getSource()==buttonEnter) //确定 演示
{
Num=Integer.parseInt(textNum.getText());
//Speed=Integer.parseInt(textSpeed.getText());
//labelMove=new Label[4][12];
for(int i=0;i<4;i++)
{
for(int j=0;j<12;j++)
{
pDisplay.add(labelMove[i][j]);
labelMove[i][j].setBackground(Color.black);
labelMove[i][j].setVisible(false);
}
}
for(int i=0;i<=Num-1;i++)
{
for(int j=0;j<=Num-1;j++)
{
if(i>=j)
{
//labelMove[i][j].setVisible(true);
}
}
}
isVisibleA=new int[4];
isVisibleB=new int[4];
isVisibleC=new int[4];
for(int i=0;i<=3;i++)
{
if(i<Num)
{
isVisibleA[i]=i+1;
}
else
{
isVisibleA[i]=0;
}
isVisibleB[i]=0;
isVisibleC[i]=0;
}
hanoi(Num,1,2,3);
}
}
}public class Main
{
public static void main(String args[])
{
MainWindow win=new MainWindow();
}}出现的异常是:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at java.awt.Container.addImpl(Unknown Source)
at java.awt.Container.add(Unknown Source)
at MainWindow.actionPerformed(Main.java:250)
at java.awt.Button.processActionEvent(Unknown Source)
at java.awt.Button.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;class MainWindow extends Frame
implements ActionListener
{
int Num,Speed,Count,Time; //盘子移动 模拟 标签
Label labelMove[][]=new Label[4][12];
int isVisibleA[],isVisibleB[],isVisibleC[];
int row_a,row_b,length;
//菜单
MenuBar menubar;
Menu menu;
MenuItem menuitem;
//控制区pControl 内 标签、文本域
Label labelNum,labelSpeed,labelCount,labelTime;
TextField textNum,textSpeed,textCount,textTime;
Button buttonEnter;
//显示区pDisplay 内 标签##################################################################
//Label labelA,labelB,labelC;
// 显示区 和 控制区
Panel pDisplay;
Panel pControl;
MainWindow()
{
FlowLayout flow=new FlowLayout();
//菜单
menubar=new MenuBar();
menu=new Menu("文件");
menuitem=new MenuItem("退出");
menuitem.setShortcut(new MenuShortcut(KeyEvent.VK_E));
menu.add(menuitem);
menubar.add(menu);
setMenuBar(menubar);
menuitem.addActionListener(this);
//控制区pControl 内 标签、文本域
labelNum=new Label("盘子数量:");
textNum=new TextField(5);
labelSpeed=new Label("移动速度:");
textSpeed=new TextField(5);
labelCount=new Label("移动次数:");
textCount=new TextField(5);
labelTime=new Label("移动时间:");
textTime=new TextField(5);
buttonEnter=new Button("确定");
buttonEnter.addActionListener(this);
// 控制区
pControl=new Panel();
pControl.setBackground(Color.cyan);
pControl.add(labelNum);
pControl.add(textNum);
pControl.add(labelSpeed);
pControl.add(textSpeed);
pControl.add(labelCount);
pControl.add(textCount);
pControl.add(labelTime);
pControl.add(textTime);
pControl.add(buttonEnter);
add(pControl,BorderLayout.NORTH);
//显示区pDisplay 内 标签
// labelA=new Label("A",Label.CENTER);
// labelB=new Label("B",Label.CENTER);
// labelC=new Label("C",Label.CENTER);
// labelA.setBackground(Color.red);
// labelB.setBackground(Color.yellow);
// labelC.setBackground(Color.blue);
// labelA.setPreferredSize(new Dimension(200,20));
// labelB.setPreferredSize(new Dimension(200,20));
// labelC.setPreferredSize(new Dimension(200,20));
// 显示区
pDisplay=new Panel();
pDisplay.setBounds(0, 0, 800, 500);
pDisplay.setBackground(Color.gray);
// pDisplay.add(labelA);
// pDisplay.add(labelB);
// pDisplay.add(labelC);
add(pDisplay,BorderLayout.CENTER);
setBounds(100,100,800,600);
setVisible(true);
validate();
}
void moveDisplay(int a,int b)
{
//System.out.println(a+"----->"+b+"\n");
switch(a)
{
case 1:
for(int i=0;i<4;i++)
{
if(isVisibleA[i]>0)
{
row_a=i;
length=isVisibleA[row_a];
break;
}
}
for(int i=0;i<length;i++)
{
labelMove[row_a][i].setVisible(false);
}
isVisibleA[row_a]=0;
break;
case 2:
for(int i=0;i<4;i++)
{
if(isVisibleB[i]>0)
{
row_a=i;
length=isVisibleB[row_a];
break;
}
}
for(int i=0;i<length;i++)
{
labelMove[row_a][4+i].setVisible(false);
}
isVisibleB[row_a]=0;
break;
case 3:
for(int i=0;i<4;i++)
{
if(isVisibleC[i]>0)
{
row_a=i;
length=isVisibleC[row_a];
break;
}
}
for(int i=0;i<length;i++)
{
labelMove[row_a][8+i].setVisible(false);
}
isVisibleC[row_a]=0;
break;
}
switch(b)
{
case 2:
for(int i=0;i<4;i++)
{
if(isVisibleB[i]>0)
{
row_b=i;
break;
}
}
row_b=row_b-1;
for(int i=0;i<length;i++)
{
labelMove[row_b][4+i].setVisible(true);
}
isVisibleA[row_b]=length;
break;
case 1:
for(int i=0;i<4;i++)
{
if(isVisibleA[i]>0)
{
row_b=i;
break;
}
}
row_b=row_b-1;
for(int i=0;i<length;i++)
{
labelMove[row_b][i].setVisible(true);
}
isVisibleA[row_b]=length;
break;
case 3:
for(int i=0;i<4;i++)
{
if(isVisibleB[i]>0)
{
row_b=i;
break;
}
}
row_b=row_b-1;
for(int i=0;i<length;i++)
{
labelMove[row_b][8+i].setVisible(true);
}
isVisibleA[row_b]=length;
break;
}
}
void hanoi(int n,int a,int b,int c)
{
if(n==1)
{
moveDisplay(a,c);
}
else
{
hanoi(n-1,a,c,b);
moveDisplay(a,c);
hanoi(n-1,b,a,c);
}
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==menuitem) //菜单 退出
{
System.exit(0);
}
else if(e.getSource()==buttonEnter) //确定 演示
{
Num=Integer.parseInt(textNum.getText());
//Speed=Integer.parseInt(textSpeed.getText());
//labelMove=new Label[4][12];
for(int i=0;i<4;i++)
{
for(int j=0;j<12;j++)
{
pDisplay.add(labelMove[i][j]);
labelMove[i][j].setBackground(Color.black);
labelMove[i][j].setVisible(false);
}
}
for(int i=0;i<=Num-1;i++)
{
for(int j=0;j<=Num-1;j++)
{
if(i>=j)
{
//labelMove[i][j].setVisible(true);
}
}
}
isVisibleA=new int[4];
isVisibleB=new int[4];
isVisibleC=new int[4];
for(int i=0;i<=3;i++)
{
if(i<Num)
{
isVisibleA[i]=i+1;
}
else
{
isVisibleA[i]=0;
}
isVisibleB[i]=0;
isVisibleC[i]=0;
}
hanoi(Num,1,2,3);
}
}
}public class Main
{
public static void main(String args[])
{
MainWindow win=new MainWindow();
}}出现的异常是:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at java.awt.Container.addImpl(Unknown Source)
at java.awt.Container.add(Unknown Source)
at MainWindow.actionPerformed(Main.java:250)
at java.awt.Button.processActionEvent(Unknown Source)
at java.awt.Button.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
解决方案 »
- 页面刷新
- Java的BigInteger实现代码看不懂
- Spring 疑惑!
- 用java程序输出个链接到邮箱,邮箱中可以点击,但链接后面带的参数传不到后台,把链接复制到浏览器地址传的数据能传到后台
- jboss启动报错
- Hibernate in Spring 错误
- spring+hibernate+oracle9i用oracle的clob进行操作的问题
- 很简单的 数据库连接问题 谢谢
- Statement的一个很怪很怪的问题,请高手过来看看~
- 请大家看一下这个程序段错在哪里?
- struts2.1的select标签...多选的select如何取值啊?
- HTTP Status 404 - There is no Action mapped for namespace / and action name hell
addImpl(Unknown Source)
add(Unknown Source)
(Main.java:250)还是不直接告诉你了,自己追踪解决问题对以后有利。
是不是传参有问题
---------------
System.out.println("22222222222222222222222222222222222");
锁定是哪段代码就好分析了撒
2,我将代码运行了一下,错误定位在pDisplay.add(labelMove[i][j]);这一行,楼主可以去设置断点仔细看一下。