2012-08-14 215 views
1
blueButton.addActionListener(new blueButtonListner()); 

当输入此代码时会发生什么?需要ActionListener代码说明

我认为什么是Java编译器创建一个名为blueButtonListner()一个对象,它成为一个输入(参数)addActionListener

如果这是正确的,因为我猜得那么这段代码也应该工作:

redButton.addActionListener(rr); 
redButtonListener rr =new redButtonListener(); 

但它显示一个错误。谁可以给我解释一下这个?

+1

*纠正你的代码“但它显示了我一个错误” *复制/粘贴错误。他们的目的是自我解释。 – 2012-08-14 03:17:29

+0

因为rr在那一点上是nullpointerexception(调用addActionListener) – 2012-08-14 03:18:36

+2

@ArunPJohny不会编译,因为'rr'未定义在第一位 – MadProgrammer 2012-08-14 03:20:14

回答

2

这是如果优先级的问题,你不能拥有的东西它的创建

redButton.addActionListener(rr); redButtonListener rr =new redButtonListener(); 

之前不会工作,因为rr尚未定义,编译器不知道是什么想法。

相反

blueButton.addActionListener(new blueButtonListner()) 

编译器创建临时对象,并将其传递到addActionListener方法。

你可以用这个

redButtonListener rr =new redButtonListener(); 
redButton.addActionListener(rr); 
+0

非常感谢您的帮助 – ChawBawwa 2012-08-14 06:17:21

6

的侦听器对象需要声明它是用来以前

redButtonListener rr = new redButtonListener(); 
redButton.addActionListener(rr); 

你是正确的约blueButton.addActionListener(new blueButtonListner());。此声明创建blueButtonListener类的实例,该类立即传递给addActionListener

+0

这是不正确的。在这种情况下,不会创建匿名内部类。 – RAY 2012-08-14 03:19:36

+2

@RAY感谢捕捉,编辑 – pb2q 2012-08-14 03:21:58

+0

没有问题。快速周转:) Upvoted。 – RAY 2012-08-14 03:22:23

1

尝试代码的其他方式:

redButtonListener rr =new redButtonListener(); 

redButton.addActionListener(rr); 
1

监听器需要先创建可以加入之前。请尝试以下操作:

redButtonListener rr =new redButtonListener(); 
redButton.addActionListener(rr); 

报告中,我们得到一个错误,通常仔细阅读错误说我应该给我的,你需要的答案。在这种情况下,它应该告诉你rr没有被定义,这显然是因为当你使用它时,它还不存在。