为了账号安全,请及时绑定邮箱和手机立即绑定

为什么点击按钮的时候报错了

为什么点击按钮的时候报错了

一个爱狗的男生 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(){ //创建JFrame JFrame frame = new JFrame("my first Gui"); //创建按钮 JButton btn = new JButton("click me"); //在window结束时,把程序结束 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //为按钮添加事件监听 btn.addActionListener(this); //把button添加到frame 的 pane上 frame.getContentPane().add(btn); //设置frame的大小 frame.setSize(500,500); //显示frame frame.setVisible(true); } //此方法为事件响应的回调函数 public void actionPerformed(ActionEvent e){ System.out.println("hello world"); try{ btn.setText("i've been clicked."); }catch(Exception ex){ ex.printStackTrace(); } }}
查看完整描述

2 回答

已采纳
?
朕日理万机

TA贡献27条经验 获得超28个赞

你在类里面声明了一个成员变量:

JButton btn;

然后在go方法里面声明了一个局部变量

JButton btn = new JButton("click me");

局部变量就把成员变量屏蔽了,你实际上添加到JFrame里面的是这个局部的btn,而不是类成员btn。

局部btn出了go方法就不再被认得了,而actionPerformed方法里面的btn会认为是类成员btn,该成员并没有被初始化,所以抛出空指针异常。

两种解决方法:第一是去掉go方法里的声明语句,改为初始化语句(看起来这是你的本意):

btn = new JButton("click me");

二是actionPerformed中不要调用成员变量btn,而是改为通过e来判断到底哪个按钮被按了:

((AbstractButton) e.getSource()).setText("i've been clicked.");


还有个小建议,以后尽量贴出错误信息,这样回答的人更容易看明白;-)

查看完整回答
4 反对 回复 2016-12-09
?
慕瓜9220888

TA贡献868条经验 获得超0个赞

BCUECZPCF

MNWHIRHOR

WUCHZTVVP

PNLDSFRLO

UVQSUKERD

GOQSDWZUK

VPVWIORUE

AOAOQQNMM

BDFUXERIL

CHGVKRYFP

NSVCVVCDN

HFJSBCPTT

DLEKZPQXL

TIHZIPQGH

SHGZRAQKV

WRDMVWQWH

CKOEDAHYB

LUCVYOSZZ

UIHYNEGKE

YRQTSZPGX

KLOQJAUKE

WETMFMCJD

TYVLVSPNN

PAZADURIS

FEVEDTKUY

PXZPYVFCP

VKWFOOFVP

FTCRQXODU

MGZLFANET

VUWFOBCST

ABKTSJZGQ

YTYOWFJTQ

JAQPYYVSJ

WBAZIPCWW

JQGZTAUOO

WHQDMSJQQ

VAPPOICST

YNFEHYVVP

PNCNGWNNY

MKNVOPFGA

TRJJJXXEO

FEUUTZNTU

BCLKDGUEI

ZVVOXGGXX

ELKPKHKDT

GNFHMPIFM

VQLNLVBUA

MACEZCZSL

JTLHCCFOL

ABLNWJNJT

CTRDVEJCS

XLDEDQTTF

MUTJSFVCT

ZASRTMPFB

UETVLRUXK

VJRNDGGPS

BSAWTPZIX

NEAYAFOUH

VZYDSKGFB

JXJOZCWNX

JNIESCYOT

EZNPIHHXH

QOGIQZCCP

BKDCPCZJT

EDSLUUYGH

QSOFEMCDQ

CDPXVPIBU

AVASFPLST

CXZOPSLLY

YJOTILKNN

RIXPHIORE

XJWODMFIV

PAOTLFOKK

TXFRJWCFS

HINFRXKNM

KRQSQKBOH

YJYQPVVOR

EIASUUYOL

KKTVKDGSI

EFBASVFVT

GEPUWWDVS

AOTXCPYXK

AHMBXEHUH

IWLQCCEOL

TOMVRUUVI

GRGHNZSUR

NODLDPLRY

ABTLKJMPP

ENPFKHUQQ

ABJEQJTZJ

RIAVRRKQD

AVNLKPIRY

NOTOXATCM

OFHWEXHJT

XODFXOEAA

KITYKNWZZ

HBGIADDGV

PQSRKUQGA

DLQRTLYRR

ITVJBHXEQ

IZRTILXNU

OFXZZZPYU

LCEFUXAAK

OCYQOHXUH

WKCOJMPVF

UVNCKNUKN

JAFKWPFOL

FDYTIILOP

ZHZLQEUBE

KVASAPVOR

JDVASVYWT

MNYUNAKJW

DBTFEQISI

UVUCRMVIY

BVUMESPSR

IJCAISBYH

PWVAPIBRH

VJBDIEUXX

KBTSUXXSE

HYKIRQNWY

ECXCLGCIP

VNTSADDQC

VCYGVHBEX

TBJVKDWJJ

IZBZBEKRH

LWSGSSVEL

GNSPKKTWD

PTCHLKNDA

UVKMONHQD

JDSUWSLEB

SGIUSSAAX

GXCUSJHDX

IGOGLQGSP

HQVXGZCPY

MDZXJRXNK

TTPKWZMNM

HIYHZQNEB

SXCLKJQTD

IGLOTUEVL

SZRRTGNKL

EKPOXROVL

NRQRQRHYP

AYYXMDJGX

ZFUKMZWQB

PNPYRORAK

VTZIQOBHO

ZXQSIYLEO

MLKTSZFCG

LJIBURWQX

LIENPCTDE

CAPPXEVCS

PTWVOBIXH

HJSHQUELB

XLAJJTGGF

SUDCLIIZJ

GLUWLMMXX

PKZKTWZCL

JXJOIVLXR

KKMBCVPIS

JKMNUHAAK

OLDVYZILB

JNCENGBAR

IJYAFILXC

EOXMXZMYY

BCKMBDQJT

PYRGPFWDD

IWLSKULRV

BPYXZUGDN

HJOHJXXEL

FUMLBBCMM

LDCLKRHYI

XOXDNKROC

USBAJDUUL

VDMOEUBCG

ABRYAHOFV

UCFHGRYFT

CRDWLBSZJ

WBTCKQHYO

PNWBELRCS

FZSBKRRRL

查看完整回答
反对 回复 2021-10-19
  • 2 回答
  • 0 关注
  • 1386 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信