harmony-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Alexey A. Ivanov (JIRA)" <j...@apache.org>
Subject [jira] Commented: (HARMONY-4755) [classlib][swing][html] JEditorPane.setPage() throws NPE
Date Fri, 07 Sep 2007 06:33:31 GMT

    [ https://issues.apache.org/jira/browse/HARMONY-4755?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12525609

Alexey A. Ivanov commented on HARMONY-4755:


First of all, Swing is *NOT* thread-safe, and constructing GUI objects in main thread is *incorrect*!
However, most of the time it should work fine. On the other hand, all Swing tutorials and
examples published at Sun site initialize its GUI in Event Dispatch Thread. And this is the
right thing to do, indeed.

java.lang.Error: This thread doesn't hold read lock. 
Means only that a thread calls readUnlock() without calling readLock() before. There's no
such check in RI. And it actually means something's wrong with the code because locks and
unlocks are not balanced.

BlockView cannot paint correctly without boxPainter. Having null boxPainter means that View
hasn't been initialized yet. As you correctly found it was initialized in setPropertiesFromAttributes().
This methods gets called when attributes are modified in Document and when this View is added
into View hierarchy.

Thus I can guess that AWT or Swing needs to paint while the GUI is still being constructed
in main thread -- again Swing is not thread-safe. Although you can access Document concurrently
and, I think, its painting should also be thread-safe. If the latter doesn't hold but have
to, you fix is incorrect, because it just work-arounds the real problem rather than solving
What I mean is that RootView should also lock Document (and it does; if not, it's a bug) before
making modification to view hierarchy and before painting.

> [classlib][swing][html] JEditorPane.setPage() throws NPE
> --------------------------------------------------------
>                 Key: HARMONY-4755
>                 URL: https://issues.apache.org/jira/browse/HARMONY-4755
>             Project: Harmony
>          Issue Type: Bug
>          Components: Classlib
>            Reporter: Vasily Zakharov
>            Priority: Minor
>         Attachments: Harmony-4755-Fix.patch
> If JEditorPane.setPage() is called on a visible pane and passed an HTML URL, NPE occurs.
> Here's the simple reproducer:
> import javax.swing.JEditorPane;
> import javax.swing.JFrame;
> public class Test {
>     public static void main(String argv[]) {
>         try {
>             JFrame frame = new JFrame("Test");
>             frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
>             frame.setSize(100, 100);
>             JEditorPane pane = new JEditorPane();
>             frame.add(pane);
>             frame.setVisible(true);
>             pane.setPage("file:test.html");
>         } catch (Throwable e) {
>             e.printStackTrace(System.out);
>         }
>     }
> } 
> test.html should exist in current directory and may be empty.
> This test produces the following exception on Harmony:
> java.lang.NullPointerException
>         at javax.swing.text.html.BlockView.paint(BlockView.java:77)
>         at javax.swing.text.RootView.paint(RootView.java:211)
>         at javax.swing.plaf.basic.BasicTextUI.paintSafely(BasicTextUI.java:839)
>         at javax.swing.plaf.basic.BasicTextUI.paint(BasicTextUI.java:88)
>         at javax.swing.plaf.ComponentUI.update(ComponentUI.java:38)
>         at javax.swing.plaf.basic.BasicTextUI.update(BasicTextUI.java:955)
>         at javax.swing.JComponent.paintComponent(JComponent.java:897)
>         at javax.swing.JComponent.paint(JComponent.java:994)
>         at javax.swing.JComponent.paintDoubleBuffered(JComponent.java:1425)
>         at javax.swing.JComponent.paintImmediately(JComponent.java:156)
>         at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:186)
>         at javax.swing.RepaintManager$1.run(RepaintManager.java:80)
>         at java.awt.event.InvocationEvent.runAndNotify(InvocationEvent.java:98)
>         at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:78)
>         at java.awt.EventQueueCore.dispatchEventImpl(EventQueueCore.java:138)
>         at java.awt.EventQueue.dispatchEvent(EventQueue.java:144)
>         at java.awt.EventDispatchThread.runModalLoop(EventDispatchThread.java:74)
>         at java.awt.EventDispatchThread.run(EventDispatchThread.java:48)
> To see the exception, please enable stack trace printing at EventDispatchThread.java,
line 89.

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

View raw message