一個(gè)愛狗的男生
2016-12-08 19:52:13
import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Gui01 implements ActionListener{ JButton btn; public static void main(String[] args) { Gui01 gui = new Gui01(); gui.go(); } public void go(){ //創(chuàng)建JFrame JFrame frame = new JFrame("my first Gui"); //創(chuàng)建按鈕 JButton btn = new JButton("click me"); //在window結(jié)束時(shí),把程序結(jié)束 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //為按鈕添加事件監(jiān)聽 btn.addActionListener(this); //把button添加到frame 的 pane上 frame.getContentPane().add(btn); //設(shè)置frame的大小 frame.setSize(500,500); //顯示frame frame.setVisible(true); } //此方法為事件響應(yīng)的回調(diào)函數(shù) public void actionPerformed(ActionEvent e){ System.out.println("hello world"); try{ btn.setText("i've been clicked."); }catch(Exception ex){ ex.printStackTrace(); } }}
2 回答
已采納

朕日理萬機(jī)
TA貢獻(xiàn)27條經(jīng)驗(yàn) 獲得超28個(gè)贊
你在類里面聲明了一個(gè)成員變量:
JButton btn;
然后在go方法里面聲明了一個(gè)局部變量
JButton btn = new JButton("click me");
局部變量就把成員變量屏蔽了,你實(shí)際上添加到JFrame里面的是這個(gè)局部的btn,而不是類成員btn。
局部btn出了go方法就不再被認(rèn)得了,而actionPerformed方法里面的btn會(huì)認(rèn)為是類成員btn,該成員并沒有被初始化,所以拋出空指針異常。
兩種解決方法:第一是去掉go方法里的聲明語句,改為初始化語句(看起來這是你的本意):
btn = new JButton("click me");
二是actionPerformed中不要調(diào)用成員變量btn,而是改為通過e來判斷到底哪個(gè)按鈕被按了:
((AbstractButton) e.getSource()).setText("i've been clicked.");
還有個(gè)小建議,以后盡量貼出錯(cuò)誤信息,這樣回答的人更容易看明白;-)
添加回答
舉報(bào)
0/150
提交
取消