Странные проблемы с HTMLEditorKit - PullRequest
1 голос
/ 08 ноября 2010

Приведенный ниже фрагмент кода имеет проблему с тем, что он не будет работать, если кнопка перезагрузки нажата в браузере, содержащем окно апплета.Работает при первом запуске апплета, но не при перезагрузке.То же самое происходит в AppletViewer.

Причина в том, что вызов Text.setText (...) аварийно завершает работу с NullPointerException глубоко внутри HTMLParser.Я уже пытался поместить вызов 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));

}

1 Ответ

1 голос
/ 08 ноября 2010

Не знаю, откуда вы скопировали этот код, но он выглядит ужасно старым.

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, а затем использовать атрибуты, если вам нужно стилизовать текст.

...