【Java】ゆるふわJTextComponent#getCaret().getMagicCaretPosition()

getMagicCaretPosition()の挙動がおかしい。
英数字を入力している間は正しく返ってくるが、一度IMEを起動して「かな」などを入力したが最後、nullしか返ってこない。

何か手があるのだろうか。(Java6 u21にて確認)

import java.awt.BorderLayout;

import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;


public class Sample extends JFrame {
	private  JTextArea area;
	public Sample() {
		super();
		area = new JTextArea();
		area.getDocument().addDocumentListener(new DocumentListenerImpl());
		setLayout(new BorderLayout());
		add(area);
		setSize(400, 300);
		setVisible(true);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
	}
	public static void main(String[] args) {
		Sample sample = new Sample();
		sample.setVisible(true);
	}

	class DocumentListenerImpl implements DocumentListener {
		public void changedUpdate(DocumentEvent e) {
			System.out.println(area.getCaret().getMagicCaretPosition());
		}
		public void insertUpdate(DocumentEvent e) {
			System.out.println(area.getCaret().getMagicCaretPosition());
		}
		public void removeUpdate(DocumentEvent e) {
			System.out.println(area.getCaret().getMagicCaretPosition());
		}
	}
}

【追記】
id:t_yanoから回答

DefaultCaretのソースをみると、MagicCaretPositionは、キャレット位置が変更されるといったんnullにされ、そのあとinvokeLaterで位置の再設定を行うタスクが登録されてます。よって、位置取得もinvokeLaterにしてEvent Dispatch Threadから取得するようにした。

    class DocumentListenerImpl implements DocumentListener {
        public void changedUpdate(DocumentEvent e) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    System.out.println(area.getCaret().getMagicCaretPosition());
                }
            });
        }
        public void insertUpdate(DocumentEvent e) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    System.out.println(area.getCaret().getMagicCaretPosition());
                }
            });
        }
        public void removeUpdate(DocumentEvent e) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    System.out.println(area.getCaret().getMagicCaretPosition());
                }
            });
        }
    }

thx @t_yano