我想用一个“button”来控制一个方法的执行不过老是出错,试了好多的办法可就是报错。不知道是什么问题,请各位大哥大姐帮帮忙看一下,是什么回事。先谢谢了代码如下:
public class TravelSeller {
static DrawPicture dp;
public static void main(String args[]) {
TravelSeller ts = new TravelSeller();
dp = new DrawPicture();
dp.launchFrame();
} private static int n = 4;
private static int[] x = new int[5];
private static int[] bestx = new int[5];
private static int[][] a = new int[5][5];
private static int cc = 0;
private static int noedge = 2000;
private static int bestc = noedge;
int m = 0;
private static int t; public void input() {
a[1][2] = dp.num1;
a[1][3] = dp.num2;
a[1][4] = dp.num5;
a[1][1] = noedge;
a[2][1] = dp.num1;
a[2][2] = noedge;
a[2][3] = dp.num6;
a[2][4] = dp.num4;
a[3][1] = dp.num2;
a[3][2] = dp.num6;
a[3][3] = noedge;
a[3][4] = dp.num3;
a[4][1] = dp.num5;
a[4][2] = dp.num4;
a[4][3] = dp.num3;
a[4][4] = noedge; for (int i = 1; i <= n; i++)
x[i] = i;
Backtrack(2);
for (int i = 1; i <= n + 1; i++) {
int j = 0;
j = i;
if (i == 5) {
j = 1;
}
t = bestx[j];
System.out.print(t);
}
System.out.println();
System.out.println("最短 的路径为:" + bestc);
} public static void Backtrack(int i) {
if (i == n) {
if (a[x[n - 1]][x[n]] != noedge
&& a[x[n]][1] != noedge
&& ((cc + a[x[n - 1]][x[n]] + a[x[n]][1]) < bestc || bestc == noedge)) {
for (int j = 1; j <= n; j++)
bestx[j] = x[j];
bestc = cc + a[x[n - 1]][x[n]] + a[x[n]][1];
}
} else {
for (int j = i; j <= n; j++)
if (a[x[i - 1]][x[j]] != noedge
&& (cc + a[x[i - 1]][x[i]] < bestc || bestc == noedge)) {
t = x[i];
x[i] = x[j];
x[j] = t;
cc += a[x[i - 1]][x[i]];
Backtrack(i + 1);
cc -= a[x[i - 1]][x[i]];
t = x[j];
x[j] = x[i];
x[i] = t;
} }
}
}--------------------------------------------------------------------------------------------------
import java.awt.*;
import java.awt.event.*;public class DrawPicture extends Frame{
//声明组件变量!
public static final int LENTH = 10;
TextField tf1 = new TextField(LENTH);
TextField tf2 = new TextField(LENTH);
TextField tf3 = new TextField(LENTH);
TextField tf4 = new TextField(LENTH);
TextField tf5 = new TextField(LENTH);
TextField tf6 = new TextField(LENTH);
int num1,num2,num3,num4,num5,num6;
Label lab1 = new Label("请输入第1条边的值");
Label lab2 = new Label("请输入第2条边的值");
Label lab3 = new Label("请输入第3条边的值");
Label lab4 = new Label("请输入第4条边的值");
Label lab5 = new Label("请输入第5条边的值");
Label lab6 = new Label("请输入第6条边的值");
Button b1 = new Button("确定");
Button b2 = new Button("调用函数");

String s1 = new String("null");
String s2 = new String("null");
String s3 = new String("null");
String s4 = new String("null");
String s5 = new String("null");
String s6 = new String("null");
private static int n = 4;
private static int[] x = new int[6];
private static int[] bestx = new int[6];
private static int[][] a = new int[5][5];
private static int cc = 0;
private static int noedge = 2000;
private static int bestc = noedge;
int m = 0;
private static int t;

static TravelSeller ts;

//显示初始化时的窗口
public void launchFrame(){
setLocation(80,80);
setSize(800,600);
setBackground(Color.cyan);
setVisible(true);
this.setResizable(false);
Panel p1 = new Panel();
p1.setLayout(new GridLayout(2,1));

Panel p2 = new Panel();
p2.setLayout(new GridLayout(2,3));
p2.add(lab1);
p2.add(lab2);
p2.add(lab3);
p2.add(tf1);
p2.add(tf2);
p2.add(tf3);

Panel p3 = new Panel();
p3.setLayout(new GridLayout(2,3));
p3.add(lab4);
p3.add(lab5);
p3.add(lab6);
p3.add(tf4);
p3.add(tf5);
p3.add(tf6);

Panel p4 = new Panel();
p4.setLayout(new GridLayout());
p1.add(p2,"North");
p1.add(p3,"South");
p4.add(b1,"North");
p4.add(b2,"South");
add(p1,"North");
add(p4,"South");
b1.addActionListener(new MyMonitor1());
b2.addActionListener(new MyMonitor2());
this.addWindowListener(new MyAdapter());

}
public void paint(Graphics g){
g.drawString("城市的为: 4",40,40);
g.drawString("A",220,200);
g.drawString("B",420,200);
g.drawString("C",220,400);
g.drawString("D",420,400);
g.drawString(s1,310,210);
g.drawString(s2,205,305);
g.drawString(s3,305,415);
g.drawString(s4,410,315);
g.drawString(s5,270,270);
g.drawString(s6,360,270);
g.setColor(Color.RED);
g.fillRect(200,200,40,40);
g.setColor(Color.DARK_GRAY);
g.fillRect(400,200,40,40);
g.setColor(Color.MAGENTA);
g.fillRect(200,400,40,40);
g.setColor(Color.green);
g.fillRect(400,400,40,40);
g.setColor(Color.black);
g.drawLine(240, 220, 400, 220);
g.drawLine(220, 240, 220, 400);
g.drawLine(240, 420, 400, 420);
g.drawLine(420, 240, 420, 400);
g.drawLine(240,240,400,400);
g.drawLine(240,400,400,240);
}

class MyAdapter extends WindowAdapter{
public void windowClosing(WindowEvent e){
System.exit(0);
}

}

class MyMonitor1 implements ActionListener {
public void actionPerformed(ActionEvent e){
num1 = Integer.valueOf(tf1.getText());
num2 = Integer.valueOf(tf2.getText());
num3 = Integer.valueOf(tf3.getText());
num4 = Integer.valueOf(tf4.getText());
num5 = Integer.valueOf(tf5.getText());
num6 = Integer.valueOf(tf6.getText());
s1 = ""+num1;
s2 = ""+num2;
s3 = ""+num3;
s4 = ""+num4;
s5 = ""+ num5;
s6 = ""+ num6;
}
public void paint(Graphics g){
g.drawString("城市的为: 4",40,40);
g.drawString(s1,310,210);
g.drawString(s2,205,305);
g.drawString(s3,305,415);
g.drawString(s4,410,315);
g.drawString(s5,270,270);
g.drawString(s6,360,270);
g.drawRect(100, 100, 60, 60);
g.setColor(Color.RED);
g.fillRect(200,200,40,40);
g.setColor(Color.DARK_GRAY);
g.fillRect(400,200,40,40);
g.setColor(Color.MAGENTA);
g.fillRect(200,400,40,40);
g.setColor(Color.green);
g.fillRect(400,400,40,40);
g.setColor(Color.black);
g.drawLine(240, 220, 400, 220);
g.drawLine(220, 240, 220, 400);
g.drawLine(240, 420, 400, 420);
g.drawLine(420, 240, 420, 400);
g.drawLine(240,240,400,400);
g.drawLine(240,400,400,240);
}
}


class MyMonitor2 implements ActionListener{
public void actionPerformed(ActionEvent e) {
ts.input();
}
}

}

解决方案 »

  1.   

    简单看了下啊, TextField tf1 = new TextField(LENTH); TextField tf2 = new TextField(LENTH); TextField tf3 = new TextField(LENTH); TextField tf4 = new TextField(LENTH); TextField tf5 = new TextField(LENTH); TextField tf6 = new TextField(LENTH);以上TextField对应的输入框如果不输入任何东西,
    然后点击按钮,在MyMonitor1里的
    num1 = Integer.valueOf(tf1.getText());
    num2 = Integer.valueOf(tf2.getText());
    num3 = Integer.valueOf(tf3.getText());
    num4 = Integer.valueOf(tf4.getText());
    num5 = Integer.valueOf(tf5.getText());
    num6 = Integer.valueOf(tf6.getText());以上这几句一定抛异常的,因为无法将 "" 转化成 int。(因为你没有输入任何值就点击了按钮)你应该对这个按钮的进行控制,或者对文本输入框的内容设置个默认的值。
      

  2.   

    还有一个问题:在DrawPicture 里定义了 static TravelSeller ts;可 ts 没有被赋值,然后调用
    class MyMonitor2 implements ActionListener {
    public void actionPerformed(ActionEvent e) {
    ts.input();
    }
    }一定会报空指针异常的。