1

以下のコード スニペットには、アプレット ウィンドウを含むブラウザでリロード ボタンが押された場合に機能しないという問題があります。アプレットの最初の起動時には機能しますが、リロード時には機能しません。AppletViewer でも同じことが起こります。

その理由は、Text.setText(...) 呼び出しが HTMLParser の奥深くで NullPointerException でクラッシュするためです。私はすでに setText 呼び出しを start() に配置しようとしましたが、それは役に立ちませんでした。

回避策を知っていますか?ご協力いただきありがとうございます。RG

@Override
public void init()
{
    //Execute a job on the event-dispatching thread:
    //creating this applet's GUI.
    try
    {
        javax.swing.SwingUtilities.invokeAndWait(new Runnable() {
            public void run() {
                createGUI();
            }
        });
    }
    catch (Exception e)
    {
        e.printStackTrace();
        System.err.println("createGUI didn't successfully complete");
    }
}

private void createGUI()
{
    ((JComponent)this.getContentPane()).setBorder(new CompoundBorder
            (BorderFactory.createRaisedBevelBorder(),
                    new EmptyBorder(5,5,5,5)));

    BorderLayout bl=new BorderLayout();
    bl.setVgap(5);
    setLayout(bl);

    Input=new JTextField();
    Input.setFont(new Font("arial",Font.PLAIN,14));
    add("North",Input);
    Input.addActionListener(this);

    HTMLEditorKit kit=new HTMLEditorKit();
    Text=new JTextPane();
    Text.setFont(new Font("arial",Font.PLAIN,14));
    Text.setEditorKit(kit);
    Text.setText("<p>Test</p>");
    Text.setEditable(false);
    Text.setBackground(Color.white);
    add("Center",new JScrollPane(Text));

}
4

1 に答える 1

1

そのコードをどこからコピーしたかはわかりませんが、非常に古く見えます。

add("North",Input); 
add("Center",new JScrollPane(Text)); 

これは、コンポーネントをコンテナに追加するときに制約を指定するための推奨される方法ではありません。推奨されるアプローチについては、APIをお読みください。または、例として「境界線レイアウトの使用方法」に関するSwingチュートリアルをお読みください。

エディターキットを作成している理由がわかりません。また、テキストが適切なHTMLではありません(違いが生じるかどうかはわかりません)。

私は過去に次のようなコードを使用しました:

String text = "<html><body>Some text><body></html>";
JEditorPane editor = new JEditorPane("text/html", text);

また、JTextPaneを使用してから、テキストのスタイルを設定する必要がある場合は属性を使用する方がはるかに簡単です。

于 2010-11-08T20:30:09.707 に答える