java监听类调用其他类中的Button属性报错

publicclassMyFrameextendsJFrame{JButtonbtn1,btn2//至于Frame内容,我就忽略不写了publicvoidframe(){... public class MyFrame extends JFrame{
JButton btn1, btn2
//至于Frame内容,我就忽略不写了
public void frame(){
btn1 = new JButton("One");
btn2 = new JButton("Two");

btn1.addActionLinstener(new MyAction);
}
}

public class MyAction implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
MyFrame mf = new MyFrame();

if(e.getActionCommand() == "One"){
mf.btn2.setEnabled(false);

}
}

}

public class Main{
public static void main(String[] args) {
MyFrame mf = new MyFrame();
mf.frame();
}
}

当我点击btn1的时候,报空指针错误,为什么呢?求教!
展开
 我来答
陈哥深惠通勤
2013-12-11 · TA获得超过1176个赞
知道小有建树答主
回答量:1909
采纳率:33%
帮助的人:838万
展开全部
MyAction类设计有点问题,因为你的mf是new出来的,里面的组件都是空指针。
可以建一个构造方法
public MyAction(JFrame frame){
mf=frame;
}
调用的时候btn1.addActionLinstener(new MyAction(this));把frame传递过去
aarontong
2013-12-11 · TA获得超过129个赞
知道小有建树答主
回答量:80
采纳率:0%
帮助的人:99.9万
展开全部
你在按钮事件中,重新实例化了MyFrame;但没有调用mf.frame()进行按钮的实例化,所以会报空指针错误;而且我觉得你在按钮中进行MyFrame的实例化,逻辑顺序不对,应该是先在MyFrame构造函数中进实例化,然后对button实例化并增加其对应的事件,最后才调用事件!
追问
我将MyFrame中增加了构造函数实例化JButton,这次不报空指针了,但是MyAction类中的mf.btn2.setEnabled(false);没有效果,请问为什么?怎么才能让他有效?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
随机名称g0
2013-12-11 · TA获得超过157个赞
知道答主
回答量:124
采纳率:0%
帮助的人:69万
展开全部
把这句:MyFrame mf = new MyFrame();

改成:JFrame jf=new MyFrame();
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式