0

したがって、私はさまざまな TextAttribute オブジェクトを使用しており、そのデフォルト値の一部は FOREGROUND のように null です (API の TextAttribute 部分では、さまざまなキー、値、主定数、およびデフォルト値が示されています)。このコードでは、デフォルトの FOREGROUND を使用し、それを Color.BLUE に変更してから、API で指定されているデフォルト値に変更しようとしましたが、null ポインター例外が発生しましたか? null がデフォルト値であるため、なぜですか?これは、FONT、CHAR_REPLACEMENT、FOREGROUND、BACKGROUND、RUN_DIRECTION、INPUT_METHOD_HIGHLIGHT、NUMERIC_SHAPING など、デフォルト値が null のすべての TextAttribute オブジェクトを対象としています。ヌルポインタ例外なし? (この例では、デフォルトの色が黒であることは理解していますが、それは私の質問ではありません。

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

Hashtableに置き換えますHashMap
Hashtablenull 値を許可しないでくださいNullPointerExceptionJavaのドキュメント
によると

put()
例外: NullPointerException - キーまたは値が null の場合。

これらの SO の質問を調べてください。
1. Hashtable で null キーまたは null 値が許可されないのはなぜですか?
2. HashMap と Hashtable の違いは?

于 2013-08-20T19:34:41.047 に答える