0

所以我正在使用不同的 TextAttribute 对象,它们的一些默认值为 null,例如 FOREGROUND(在 API 的 TextAttribute 部分中,它表示它们不同的键、值、主常量和默认值)。在这段代码中,我使用默认的 FOREGROUND,然后将其更改为 Color.BLUE,然后尝试将其更改为 API 中指定的默认值为 null,但我得到一个空指针异常?为什么会这样,因为 null 是它的默认值?这适用于所有默认值为 null 的 TextAttribute 对象,例如... FONT、CHAR_REPLACEMENT、FOREGROUND、BACKGROUND、RUN_DIRECTION、INPUT_METHOD_HIGHLIGHT 和 NUMERIC_SHAPING ....如果我更改了值,为什么我不能将其更改回默认值没有空指针异常?(我理解在示例中默认颜色是黑色,这不是我的问题,

public class NewClass extends Applet{
public void paint(Graphics g) {

    Font font = new Font(Font.SERIF, Font.PLAIN, 24);
    g.setFont(font); 
    String text = "This String";
    g.drawString(text, 45, 30);

    Hashtable<TextAttribute, Object> map =
        new Hashtable<TextAttribute, Object>();

    map.put(TextAttribute.FOREGROUND, Color.BLUE);
    font = font.deriveFont(map);
    g.setFont(font);
    g.drawString(text, 45, 50);

    map.put(TextAttribute.FOREGROUND, null);
    font = font.deriveFont(map);
    g.setFont(font);
    g.drawString(text, 45, 70);
}

public static void main(String[] args) {

    Frame f = new Frame("Attributed Text Sample");

    f.addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });

    f.add("Center",  new NewClass());
    f.setSize(new Dimension(250, 200));
    f.setVisible(true);
}

}

4

1 回答 1

1

将您的替换HashtableHashMap.
Hashtable不允许空值。所以你得到NullPointerException.
根据java文档

put()
抛出:NullPointerException - 如果键或值为 null。

请查看这些 SO Questions。
1.为什么Hashtable不允许空键或空值?
2 、HashMap和Hashtable的区别?

于 2013-08-20T19:34:41.047 回答