当前位置: 代码迷 >> Java相关 >> 匿名类里面的nullException[求助]
  详细解决方案

匿名类里面的nullException[求助]

热度:131   发布时间:2007-02-04 21:09:46.0
匿名类里面的nullException[求助]

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

class Tim extends JFrame{
JPanel pnl;
JButton btn1=new JButton("开始");
JButton btn2=new JButton("停止");
FlowLayout flowLayout=new FlowLayout();
Timer obj;
Class cl;

Tim(){
super("Timer");
men();
action();
}
void men(){
pnl=(JPanel)getContentPane();
pnl.setLayout(flowLayout);
setSize(new Dimension(400,300));
pnl.add(btn1);
pnl.add(btn2);
this.setVisible(true);
}
void action(){
btn1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
obj=new Timer(5000,this);
obj.start();
System.out.println("aaaaaaaaaaaaaaaa");
}
});
btn2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
obj.stop();//这里的obj为null,为什么我在上面属性区创建了引用,在btn1里面声明,影响不到btn2里面来呢?这个问题如何解决啊?
}
});
}

public static void main(String[] args){
Tim cc=new Tim();
}
}

搜索更多相关的解决方案: 匿名  

----------------解决方案--------------------------------------------------------
obj=new Timer(5000,this);
把这句放到Timer obj=new Timer(5000,this);
试一下


----------------解决方案--------------------------------------------------------
不行啊,放上去的话,这个this指的就是这个窗体了,就不是监听器了,这样构造的时候就错了
----------------解决方案--------------------------------------------------------
你在构造函数里面把它构造好

然后点开始就调用它的start

停止就stop就可以了

不要你点start的时候才去构造
----------------解决方案--------------------------------------------------------

试试把obj放到action 这个大方法下面,声明为final的 作用域的问题


----------------解决方案--------------------------------------------------------

[CODE]
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

class Tim extends JFrame{
JPanel pnl;
JButton btn1=new JButton("开始");
JButton btn2=new JButton("停止");
FlowLayout flowLayout=new FlowLayout();

Class cl;
ActionListener listener=new ActionListener(){
public void actionPerformed(ActionEvent e){

obj.start();
System.out.println("aaaaaaaaaaaaaaaa");
}
};
Timer obj=new Timer(500,listener);

Tim(){
super("Timer");
men();
action();
}
void men(){
pnl=(JPanel)getContentPane();
pnl.setLayout(flowLayout);
setSize(new Dimension(400,300));
pnl.add(btn1);
pnl.add(btn2);
this.setVisible(true);
}
void action(){
btn1.addActionListener(listener);
btn2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
obj.stop();
}
});
}

public static void main(String[] args){
Tim cc=new Tim();
}
}

[/CODE]


----------------解决方案--------------------------------------------------------
谢谢楼上的几位了,改动了一下确实出效果了,又长了不少见识,谢了~
----------------解决方案--------------------------------------------------------
以下是引用无理取闹在2007-2-4 22:08:23的发言:

[CODE]
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

class Tim extends JFrame{
JPanel pnl;
JButton btn1=new JButton("开始");
JButton btn2=new JButton("停止");
FlowLayout flowLayout=new FlowLayout();

Class cl;
ActionListener listener=new ActionListener(){
public void actionPerformed(ActionEvent e){

obj.start();
System.out.println("aaaaaaaaaaaaaaaa");
}
};
Timer obj=new Timer(500,listener);

Tim(){
super("Timer");
men();
action();
}
void men(){
pnl=(JPanel)getContentPane();
pnl.setLayout(flowLayout);
setSize(new Dimension(400,300));
pnl.add(btn1);
pnl.add(btn2);
this.setVisible(true);
}
void action(){
btn1.addActionListener(listener);
btn2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
obj.stop();
}
});
}

public static void main(String[] args){
Tim cc=new Tim();
}
}

[/CODE]

红体部分又是什么新功能哈?  解释下了挖。。


----------------解决方案--------------------------------------------------------

内部类。


----------------解决方案--------------------------------------------------------

类部类是这样写的么?。。。。。。
看到要再去看看了 


----------------解决方案--------------------------------------------------------
  相关解决方案