读书人

《初学者》一个持有对方引用的有关问题

发布时间: 2012-03-21 13:33:15 作者: rapoo

《菜鸟求助》一个持有对方引用的问题
import java.awt.*;
import java.awt.event.*;


public class Test45 {
public static void main(String args[]){
new MyFrame().launch();
}
}

class MyFrame extends Frame{
public void launch(){
FlowLayout f = new FlowLayout();
TextField tf1 = new TextField(10);
TextField tf2 = new TextField(10);
TextField tf3 = new TextField(15);
Label l1 = new Label("+");
Button b = new Button("=");
setLayout(f);
add(tf1);
add(l1);
add(tf2);
add(b);
add(tf3);
b.addActionListener(new Listener(this));
pack();
setVisible(true);
}



}

class Listener implements ActionListener {
MyFrame mf = null;
Listener(MyFrame mf){
this.mf= mf;
}

public void actionPerformed(ActionEvent w){
int num1 = Integer.parseInt(mf.tf1.getText());
int num2 = Integer.parseInt(mf.tf2.getText());
mf.tf3.setText(" "+ (num1+num2));
}
}

为什么mf.tf1.getText()
mf.tf2.getText()
mf.tf3.getText()

会报错 我哪里写错了 谢谢啊

[解决办法]
tf1 和 tf2是void launch()方法的局部变量 就算是全局变量 那也要设为公有的 或者 写set get 方法
[解决办法]
MyFrame在main函数里new,就调用那个
[解决办法]

Java code
package com.yxk.test;/** * ClassName:MyFrame * @Description: TODO(这里用一句话描述这个类的作用)  * @author   yxk * @version 1.0 2011-9-13 * @since 1.0 * @see */import java.awt.*;import java.awt.event.*;public class MyFrame extends Frame implements ActionListener{    /**     * @Description: TODO(添加属性注释)     */    private static final long serialVersionUID = 1L;    public FlowLayout f = new FlowLayout();    public TextField tf1 = new TextField(10);    public TextField tf2 = new TextField(10);    public TextField tf3 = new TextField(15);    public Label l1 = new Label("+");    public Button b = new Button("=");    public MyFrame() {        this.addWindowListener(new WindowAdapter() {            @Override            public void windowClosing(WindowEvent e) {                System.exit(0);            }        });    }    public void launch() {        setLayout(f);        add(tf1);        add(l1);        add(tf2);        add(b);        add(tf3);        b.addActionListener(this);        pack();        setVisible(true);    }    @Override    public void actionPerformed(ActionEvent e) {                int num1 = Integer.parseInt(tf1.getText());        int num2 = Integer.parseInt(tf2.getText());        tf3.setText(" " + (num1 + num2));            }    public static void main(String[] args) {        new MyFrame().launch();    }}
[解决办法]
错误是不是找不到变量,你那几个tf1,tf2,tf3,在方法里面声明的!对像是找不到的!
你把他改成成员变量,然后在方法里面实例化;但注意的是,这些成员变量一定要在点用前实例化,否着会报nullclassexception

读书人网 >J2SE开发

热点推荐