Java GUI - Wait Cursor

User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Java GUI - Wait Cursor

Post by Sabina »

del
Last edited by Sabina on 20 Jan 2004 01:54, edited 1 time in total.
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Re: Java GUI - Wait Cursor

Post by Sabina »

del
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Re: Java GUI - Wait Cursor

Post by Sabina »

Безрезультатно набродившись по аглицким форумам возвращаюсь сюда с тем же вопросом. Полный ступор у меня с этой проблемой. Хоть бы знать в каком направлении копать...

I have wait cursor set in action_Performed as:
mLoginDialog.startWaitCursor(mLoginDialog.getRootPane());
where

/** Sets cursor for specified component to Wait cursor */
public static void startWaitCursor(JComponent component) {
RootPaneContainer root =
(RootPaneContainer)component.getTopLevelAncestor();
root.getGlassPane().setCursor(WAIT_CURSOR);
root.getGlassPane().setVisible(true);
}

/** Sets cursor for specified component to normal cursor */
public static void stopWaitCursor(JComponent component) {
RootPaneContainer root =
(RootPaneContainer)component.getTopLevelAncestor();
root.getGlassPane().setCursor(DEFAULT_CURSOR);
root.getGlassPane().setVisible(false);
}

When I click the action button, I see default wait cursor (hourglass) no problem. But if I move mouse outside this frame and then move it back, cursor changes to one of the resize cursor, so it looks like either horizontal or vertical 2 point arrow.

I wonder why this is happening and how can I avoid it?

Сабина
User avatar
OO8
Уже с Приветом
Posts: 1243
Joined: 09 Sep 2003 18:31

Re: Java GUI - Wait Cursor

Post by OO8 »

Sabina wrote:I wonder why this is happening and how can I avoid it?


Try

Code: Select all

  public void startWaitCursor(Component component) {
    SwingUtilities.getWindowAncestor(component).setCursor(
        Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
  }

  public void stopWaitCursor(Component component) {
    SwingUtilities.getWindowAncestor(component).setCursor(
        Cursor.getDefaultCursor());
  }


Works with JDK 1.3.1 and 1.4.1

PS: а naming conventions (action_Performed, mLoginDialog) из предыдущего опыта или так в школах сейчас учат?
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Re: Java GUI - Wait Cursor

Post by Sabina »

OO8 wrote:Try

Code: Select all

  public void startWaitCursor(Component component) {
    SwingUtilities.getWindowAncestor(component).setCursor(
....


Не помогает. Я думаю it has something to do with dialog and action being separated.

OO8 wrote:PS: а naming conventions (action_Performed, mLoginDialog) из предыдущего опыта или так в школах сейчас учат?


В школе учат "actionPerformed" - это я тут почему-то с underscore напечатала, видать под влиянием кучи переименованных накануне файлов :mrgreen:

Что касается mLoginDialog - наверное так и учат, по крайней мере учили года 3 назад в University of California, Santa Barbara (не меня! :))

Cабина

PS. А вообще персональное огромное спасибо за попытку мне помочь. Вы - первый из всего Интернет сообщества с момента оглашения этой проблемы :radio%:
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Re: Java GUI - Wait Cursor

Post by Sabina »

Looks like I am not alone...http://forum.java.sun.com/thread.jsp?thread=482499&forum=57&message=2251482

Cогласно вот этой статьео курсорах и модальных диалогах, мне нужно сажать курсор на родителя (Owner frame) mLoginDialog

Но в моей ситуации это LoginDialog, то есть у него нет Valid Parent.
Это первый диалог, который инициализируется из LaunchApplication Action.

Уф, короче.

Сабина
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Re: Java GUI - Wait Cursor

Post by Sabina »

Вот оно первое разочарование в Джаве :( ..

Обычный wait cursor на обычном логин скрине вот с таким вот гимором http://forum.java.sun.com/thread.jsp?thread=482499&forum=57&message=2251482 ? :pain1:

Сабина
User avatar
OO8
Уже с Приветом
Posts: 1243
Joined: 09 Sep 2003 18:31

Re: Java GUI - Wait Cursor

Post by OO8 »

Sabina wrote:Не помогает. Я думаю it has something to do with dialog and action being separated.


Вообще-то я это для модального диалога тоже проверил.
А Вы случайно не в AWT event thread пытаетесь логиниться? Например

Code: Select all

LoginDialog...

    public void actionPerformed(ActionEvent e) {
        startWaitCursor(this);

        // blocking call
        doLogin();

        stopWaitCursor(this);
    }


Если так, то неудиветльно что курсор не перерисовывается.

Rule of thumb: don't make any blocking calls (for example, network I/O ) from AWT event dispatch thread. See Threads and Swing.

Если делать вот так, то все должно работать.

Code: Select all

LoginDialog...

    public void actionPerformed(ActionEvent e) {
        Thread loginThread = new Thread(new Runnable() {
            public void run() {

                // blocking call
                doLogin();

                // restore cursor
                SwingUtilities.invokeLater(new Runnable() {
                    public void run() {
                        stopWaitCursor(this);
                    }
                 });
             }
          });

        startWaitCursor(this);
        loginThread.start();
    }


А "решение" которое Вы нашли выкиньте. Можно конечно и через ммм... и так делать, но тогда разочарований в Java будет очень много.
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Re: Java GUI - Wait Cursor

Post by Sabina »

OO8 wrote:.......
А Вы случайно не в AWT event thread пытаетесь логиниться? Например
.....
Если так, то неудиветльно что курсор не перерисовывается.

Rule of thumb: don't make any blocking calls (for example, network I/O ) from AWT event dispatch thread. See Threads and Swing.
......А "решение" которое Вы нашли выкиньте. Можно конечно и через ммм... и так делать, но тогда разочарований в Java будет очень много.


Спасибо, что не дали разочароваться :D

Сабина

Return to “Вопросы и новости IT”