2010-11-08 8 views
1

В приведенном ниже фрагменте кода возникает проблема, что он не будет работать, если в браузере будет нажата кнопка перезагрузки, содержащая окно апплета. Он работает при первом запуске апплета, но не при перезагрузке. То же самое происходит в AppletViewer.Странные проблемы с HTMLEditorKit

Причина заключается в том, что вызов 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

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

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

+0

Спасибо за ответ! Да, код макета старомодный, но он все еще работает, и это не проблема. Я попробовал свой JEditorPane метод без HTMLEditorKit, и это похоже на то же, но проще. Но апплет все еще падает после перезагрузки, с такой же проблемой в парсе HTML. Если я использую обычный текст, я могу перезагружаться так часто, как мне нравится. – Rene

+0

И нет, недостающие теги html и body не имеют значения. – Rene

+0

Благодаря вашей помощи я нашел это: Это ошибка. См. Http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6993691 – Rene

Смежные вопросы