On 9/27/2011 5:19 AM, Sean Chou wrote:
Hi Pavel,

     Is toolkit.realSync() doing the job of "sleep 10s and throw an
timeout exception" ?

Definitely, not. SunToolkit.realSync() is what Robot.waitForIdle() was initially supposed to be: this call should wait until all the pending events (native, Java) to be processed. Sometimes, however, it fails to do so, e.g. when native events are turned into Java events, and Java event handlers call more native methods - then the TimeoutException is thrown.

Thanks,

Artem

I found the main thread exit after realSynch is invoked. Should I catch
that exception?
bug6848475.java seems not catching it.


2011/9/26 Pavel Porvatov <[email protected]
<mailto:[email protected]>>

    __
    Hi Sean,
    Hi Pavel,

       Thanks for new comments. I was looking
    at test\javax\swing\JTextArea\6940863
    and copied the copyright from there, and just put the
    initialization part of the swing
    code into EDT. I didn't find realSynch in Toolkit class so used
    synch. I'll modify
    that.
    The realSync is a SunToolkit method.

       About the first comment, do you mean to put the testcase and
    the fix together
    in a webrev ?
    Yep! It's hard to reconstruct fix from different mails. Don't forget
    to select an appropriate folder for the test...

    Thanks, Pavel


    2011/9/26 Pavel Porvatov <[email protected]
    <mailto:[email protected]>>

        Hi Sean,
        Hi Pavel,

            Thanks for the comments. I modified the testcase
        according to the comments,
        please have a look at it again.
            I tried to run with jtreg and it runs well.
        Looks much better. Still have several comments:

        1. Could you please sent complete fix as a webrev, but not
        parts of the fix as a single file?

        2. Date of copyright...

        3. You are still using Swing components on non-EDT thread. As
        I wrote before take a look at the
        test\javax\swing\JSlider\6848475\bug6848475.java test...

        4. Use toolkit.realSync() instead of toolkit.sync(). BTW: as
        described in javadoc realSync cannot be invoked on the EDT
        thread...

        Regards, Pavel

        P.S. Sorry for my stubborn =) But on some machines not
        accurate tests actually fail (e.g. on Solaris). Therefore
        later we must fix tests and that's a really boring task...



        2011/9/20 Pavel Porvatov <[email protected]
        <mailto:[email protected]>>

            Hi Sean,

            The have several comments :

            1. Could you please read http://openjdk.java.net/jtreg/
            is it possible run your test via jtreg?

            2. There is no copyright in the begin of test

            3. There are no jtreg tags

            4. All Swing code must be initialized on the EDT thread

            5. Keep test minimal as possible, please. It helps other
            people to understand your code.... E.g. there is no need
            to create JButton with listener.

            6. Note that the "frame.setVisible(true)" doesn't
            guarantee that after that line Frame is visible, you
            should use toolkit.realSync() here

            7. No TODO, please

            8. Are you sure your test should pass if exceptions
            occurs (see your catch blocks)

            Please take a look at other tests and use them as a good
            examples....

            Regards, Pavel


            Hi Pavel,

               I wrote a test case for the behavior of DefaultCaret.
            Please take a look, it is
            attached.



            2011/9/15 Pavel Porvatov <[email protected]
            <mailto:[email protected]>>

                Hi Sean,
                Hi Pavel,

                    I'm comfortable with moving the checking into
                DefaultCaret#updateSystemSelection method.
                    About regression  test, I'm not sure how to
                write, because it contains user operation. Can you
                give me a similar test so I can write one for this bug?
                Yes, you can find a lot examples in the
                test/javax/swing directory by word Robot, e.g.
                test\javax\swing\JSlider\6848475\bug6848475.java.
                One hint: use reflection ONLY if there are no
                another ways to write a test...

                Regards, Pavel


                2011/9/13 Pavel Porvatov <[email protected]
                <mailto:[email protected]>>

                    Hi Sean,
                    Hi Pavel ,

                        I'm sorry I didn't make update for this
                    bug for a long time, and here is some
                    recent investigation. The scenario is as follows:

                    Suppose we are dragging "abcde" over TextField
                    tf, which have "hello dragging" as
                    its content. When we are dragging from start
                    to end, there is a cursor moving from
                    "h" to "g", which means the place to insert
                    "abcde" if we drop it.
                    When we dragging "abcde" exit tf, there will
                    be a dragExit event, the tf needs to
                    restore its original status after we drag out.
                    Eg. if its cursor is between "h" and
                    "e" in "hello", which appears like "h|ello",
                    when we are dragging over it, it may like
                    "hello dr|agging", and when drag exit, it
                    needs to be "h|ello" again.
                    So in dragExit handler, it calls
                    javax.swing.TransferHandler.cleanup(false), which
                    means only to restore the original state.
                    cleanup calls
                    javax.swing.text.JTextComponent.setDropLocation to
                    set the cursor to original
                    position. And setDropLocation calls
                    DefaultCaret.setDot and DefaultCaret.moveDot
                    to set the state.
                    The problem is moveDot doesn't know this is
                    just to restore the original state,
                    it treats the invocation as an action to
                    select something. And it
                    calls updateSystemSelection
                    which will
                    call java.awt.datatransfer.Clipboard.setContent.
                    And the selected content
                    is changed from "abcde" to the original
                    selected part of "hello dragging", then
                    the drop operation finds it is not the string
                    dragged and nothing is dropped.

                    So I made a simple patch(attached) . It just
                    check if the textField owns focus
                    before updateSystemSelection, if it is not
                    focused, it does not treat the moveDot as
                    a selection action and does not
                    call Clipboard.setContent.  This works on Linux,
                    however, DefaultCaret is shared by Linux and
                    Windows while windows doesn't have
                    this problem. So I don't think this is a
                    correct patch, but it brings my question.

                    I think it is strange for DefaultCaret to use
                    setDot and moveDot to restore
                    original state, especially moveDot will cause
                    an updateSystemSelection operation,
                    which makes moveDot much like an action from
                    user instead of just restoring state.

                    I'm not sure why it works well on windows, but
                    I don't think it is right to call
                    updateSystemSelection or it is not right to
                    use setDot and moveDot to restore
                    the original state. Is there any reason for that ?
                    Thanks for the patch! I believe you are right
                    and we shouldn't update system selection
                    clipboard when the component doesn't have
                    focus. I'd like to modify your fix and move
                    checking into the
                    DefaultCaret#updateSystemSelection method:
                      if (this.dot != this.mark && component !=
                    null && component.hasFocus()) {

                    We also must write regression tests for fixes
                    if possible, so an automatic test is needed as
                    well. Could you please write a test for the fix?


                    > I'm not sure why it works well on windows,
                    That's because Windows doesn't have system
                    selection clipboard...


                    > Is there any reason for that ?
                    No, that's a just bug...

                    Regards, Pavel


                    2011/6/6 Pavel Porvatov
                    <[email protected]
                    <mailto:[email protected]>>

                        Hi Sean,
                        Hi,

                        I reported, but the system doesn't reply
                        me a bug number. It says "will give me
                        email",
                        but I haven't got one yet. Is this the
                        right process, or I might make a problem
                        when
                        reporting?
                        I don't know why the system didn't report
                        bug ID, but your bug was filed
                        successfully. You can find it here:
                        
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7049024

                        Regards, Pavel


                        2011/5/27 Pavel Porvatov
                        <[email protected]
                        <mailto:[email protected]>>

                            Hi Sean,
                            Hi all,

                                I have a testcase related to DnD
                            failure with JTextArea and
                            JTextField on linux. The
                            testcase is as follows:

                            /*
                             * DnDTest.java
                             */
                            import java.awt.Color;
                            import java.awt.Component;
                            import java.awt.Dimension;
                            import java.awt.FlowLayout;
                            import java.awt.Frame;
                            import java.awt.event.WindowAdapter;
                            import java.awt.event.WindowEvent;

                            import javax.swing.JTextArea;
                            import javax.swing.JTextField;


                            public class DnDTest extends Frame {
                            Component c;
                            public DnDTest() {
                            super("Single Frame --- AWT Frame");
                            super.setBackground(Color.gray);
                            // set layout here.
                            setLayout(new FlowLayout());
                            c = new JTextArea("JTextArea
                            component");
                            c.setPreferredSize(new
                            Dimension(400, 100));
                            add(c);
                            c = new JTextField("JTextField
                            component(No IM)");
                            c.setPreferredSize(new
                            Dimension(400, 20));
                            add(c);
                            addWindowListener(new WindowAdapter() {
                            public void
                            windowClosing(WindowEvent event) {
                            System.exit(0);
                            }
                            });
                            setSize(850, 360);
                            setVisible(true);
                            }
                            public static void main(String[] args) {
                            new DnDTest();
                            }
                            }


                            Reproduce steps:
                            1. Run the testcase with b143
                            2. Open a new file with gedit and
                            input some words like "abcde"
                            3. Drag "abcde" into JTextField and
                            drop it there.
                            4. Once more, drag "abcde" into
                            JTextField and then move out of the
                            Frame (keep draging) and drag
                            into JTextField again and drop it.

                            Expectation:
                            The second DnD inputs another
                            "abcde" into JTextField.

                            Result:
                            The second DnD inputs nothing
                            into JTextField.
                            Yes, looks like a bug. The test case
                            works on Windows as expected.


                            Investigation:
                            The JTextArea as well has this
                            problem, and in step 4, if we drag
                            "abcde" over JTextField and then
                            drop into JTextArea, nothing
                            is input into JTextArea either.
                            However, if "abcde" is drag
                            into JTextField or JTextArea
                            directly or when JTextArea/Field are
                            empty as in step 2, it works.


                            Are there any comments? And can
                            anyone file a bug for it please ?
                            Anybody can file a bug,
                            http://bugreport.sun.com/bugreport/

                            Regards, Pavel




                        --
                        Best Regards,
                        Sean Chou





                    --
                    Best Regards,
                    Sean Chou





                --
                Best Regards,
                Sean Chou





            --
            Best Regards,
            Sean Chou





        --
        Best Regards,
        Sean Chou





    --
    Best Regards,
    Sean Chou





--
Best Regards,
Sean Chou

Reply via email to