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 Tue, 11 Sep 2007 11:20:32 GMT

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

Alexey A. Ivanov commented on HARMONY-4755:
-------------------------------------------

Vasily, thank you for the details.

You mean the first thread (EDT) tries to paint and locks in paintSafely(). That's great!

The second thread locks the document in modelChanged() (and it's in the main thread, right?).
As the name suggests, this one should be called as a reaction to changes in document. But
document listeners are called while document is still holding writeLock(). The case of calling
listeners is specially handled in Document in order to allow the thread that performed mutation
to acquire readLock() -- no other thread can.

What cames into my mind is the cause can lie in this special mechanism to call listeners.
The flag which says if Document calls listeners is modified outside of synchronized section
(see fireXXX methods in javax.swing.text.AbstractDocument). I believe this might cause problems.

As another clue, you may try to roll back changes to the locking code and try with the original
code.

> [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
>            Assignee: Alexey A. Ivanov
>            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.


Mime
View raw message