当前位置: 代码迷 >> Java相关 >> 代码哪错了?
  详细解决方案

代码哪错了?

热度:181   发布时间:2010-08-14 22:43:36.0
代码哪错了?
package event;
import java.awt.*;
import java.awt.event.*;
public class Item extends Frame implements ItemListener
{
    private static final long serialVersionUID = 1L;
    static Item frm=new Item();
    static Checkbox cb1=new Checkbox("粗体");
    static Checkbox cb2=new Checkbox("斜体",true);
    static Checkbox cbg1=new Checkbox("红色",true);
    static Checkbox cbg2=new Checkbox("蓝色");
    static TextArea ta=new TextArea("选项事件类ItemEvent的使用方法");
    public static void main(String args[])
    {
        frm.setLayout(new FlowLayout(FlowLayout.LEFT));
        frm.setBounds(100, 100, 400, 300);
        frm.add(cb1);
        frm.add(cb2);
        frm.add(cbg1);
        frm.add(cbg2);
        frm.add(ta);
        cb1.addItemListener(frm);
        cb2.addItemListener(frm);
        cbg1.addItemListener(frm);
        cbg2.addItemListener(frm);
        CheckboxGroup grp=new CheckboxGroup();
        cbg1.setCheckboxGroup(grp);
        cbg2.setCheckboxGroup(grp);
        Font f1=ta.getFont();
        ta.setFont(new Font(f1.getName(),Font.ITALIC,f1.getSize()));//这句去掉就对了,但是想设个默认值
        ta.setForeground(Color.red);
        
        frm.setVisible(true);
    }
    public void itemStateChanged(ItemEvent e)
    {
        Checkbox cb=(Checkbox) e.getSource();
        Font font1=ta.getFont();
        int stytle1=font1.getStyle();
        if(cb==cbg1) ta.setForeground(Color.red);
        else if(cb==cbg2) ta.setForeground(Color.blue);
        else if((cb==cb1)||(cb==cb2))
        {
            if(cb==cb1) stytle1=stytle1^1;
            else if(cb==cb2) stytle1=stytle1^2;
        }
        ta.setFont(new Font(font1.getName(),stytle1,font1.getSize()));
    }
   
}
搜索更多相关的解决方案: 代码  

----------------解决方案--------------------------------------------------------
程序代码:
package event;
import java.awt.*;
import java.awt.event.*;
public class Item extends Frame implements ItemListener
{
    private static final long serialVersionUID = 1L;
    static Item frm=new Item();
    static Checkbox cb1=new Checkbox("粗体");
    static Checkbox cb2=new Checkbox("斜体",true);
    static Checkbox cbg1=new Checkbox("红色",true);
    static Checkbox cbg2=new Checkbox("蓝色");
    static TextArea ta=new TextArea("选项事件类ItemEvent的使用方法");
    public static void main(String args[])
    {
        frm.setLayout(new FlowLayout(FlowLayout.LEFT));
        frm.setBounds(100, 100, 400, 300);
        frm.add(cb1);
        frm.add(cb2);
        frm.add(cbg1);
        frm.add(cbg2);
        frm.add(ta);
        cb1.addItemListener(frm);
        cb2.addItemListener(frm);
        cbg1.addItemListener(frm);
        cbg2.addItemListener(frm);
        CheckboxGroup grp=new CheckboxGroup();
        cbg1.setCheckboxGroup(grp);
        cbg2.setCheckboxGroup(grp);
        ta.setForeground(Color.red);
      
        frm.setVisible(true);
        Font f1=ta.getFont();
        ta.setFont(new Font(f1.getName(),Font.ITALIC,f1.getSize()));//放在这里就正常了

    }
    public void itemStateChanged(ItemEvent e)
    {
        Checkbox cb=(Checkbox) e.getSource();
        Font font1=ta.getFont();
        int stytle1=font1.getStyle();
        if(cb==cbg1) ta.setForeground(Color.red);
        else if(cb==cbg2) ta.setForeground(Color.blue);
        else if((cb==cb1)||(cb==cb2))
        {
            if(cb==cb1) stytle1=stytle1^1;
            else if(cb==cb2) stytle1=stytle1^2;
        }
        ta.setFont(new Font(font1.getName(),stytle1,font1.getSize()));
    }
   
}


原本的代码运行时报空指针错误,f1为null
猜测是frm没有显示,所以testarea并没有完全初始化好,所以Font f1=ta.getFont();拿到的是null

PS:不修改getFont的顺序,把TextArea改成JTextArea类就正常了。奇怪,JTextArea和TextArea的初始化方法不一样嘛- -



----------------解决方案--------------------------------------------------------
   求真相,到底是什么原因。。。
----------------解决方案--------------------------------------------------------
  相关解决方案