Copyright (c) 2002, Junzo SATO. All rights reserved.

Effective Use Of MathActionListener With Menu

A menu command invoked by a selection of menu item takes sometimes long time to do some calculation etc. Once the menu item is selected, the menu should be hidden immediately instead of being opened. Three ActionListeners; MathActionListener, ThreadMathActionListener, and ThreadMathActionListener2, were tested.

Junzo SATO

Medical Information Technology & Administration Planning, Kumamoto University Hospital

jsato@fc.kuh.kumamoto-u.ac.jp
http://fc.kuh.kumamoto-u.ac.jp/~jsato/

Nov 4th 2002

[Graphics:Images/thread-and-menu_gr_1.gif]

InstallJava

JLink is installed.

For Sun's j2sdk user on PC, setting CommandLine option should be required.

[Graphics:Images/thread-and-menu_gr_2.gif]
[Graphics:Images/thread-and-menu_gr_3.gif]

Three ActionListeners

MathJFrame is created.

[Graphics:Images/thread-and-menu_gr_4.gif]
[Graphics:Images/thread-and-menu_gr_5.gif]
[Graphics:Images/thread-and-menu_gr_6.gif]
[Graphics:Images/thread-and-menu_gr_7.gif]
[Graphics:Images/thread-and-menu_gr_8.gif]
[Graphics:Images/thread-and-menu_gr_9.gif]

JavaSwing is loaded.

[Graphics:Images/thread-and-menu_gr_10.gif]

Menu bar is created.

[Graphics:Images/thread-and-menu_gr_11.gif]
[Graphics:Images/thread-and-menu_gr_12.gif]

Menu is added.

[Graphics:Images/thread-and-menu_gr_13.gif]
[Graphics:Images/thread-and-menu_gr_14.gif]
[Graphics:Images/thread-and-menu_gr_15.gif]
[Graphics:Images/thread-and-menu_gr_16.gif]
[Graphics:Images/thread-and-menu_gr_17.gif]
[Graphics:Images/thread-and-menu_gr_18.gif]
[Graphics:Images/thread-and-menu_gr_19.gif]
[Graphics:Images/thread-and-menu_gr_20.gif]

Menu item handler is defined.

[Graphics:Images/thread-and-menu_gr_21.gif]

Action listeners are created.

[Graphics:Images/thread-and-menu_gr_22.gif]
[Graphics:Images/thread-and-menu_gr_23.gif]
[Graphics:Images/thread-and-menu_gr_24.gif]
[Graphics:Images/thread-and-menu_gr_25.gif]
[Graphics:Images/thread-and-menu_gr_26.gif]
[Graphics:Images/thread-and-menu_gr_27.gif]
[Graphics:Images/thread-and-menu_gr_28.gif]
[Graphics:Images/thread-and-menu_gr_29.gif]
[Graphics:Images/thread-and-menu_gr_30.gif]
[Graphics:Images/thread-and-menu_gr_31.gif]
[Graphics:Images/thread-and-menu_gr_32.gif]
[Graphics:Images/thread-and-menu_gr_33.gif]

MathActionListener is a JLink's default action listener. When the action is performed, callMathHandler() in a Java class is invoked. The task will not return before finishing evaluation.

ThreadMathActionListener wraps callMathHandler() with new Thread in it's Java code. Long term calculation is done in another thread.

ThreadMathActionListener2 uses a wrapping thread by SwingUtilities.invokeLater( ) with new Runnable( ).

Hander is set.

[Graphics:Images/thread-and-menu_gr_34.gif]
[Graphics:Images/thread-and-menu_gr_35.gif]
[Graphics:Images/thread-and-menu_gr_36.gif]
[Graphics:Images/thread-and-menu_gr_37.gif]
[Graphics:Images/thread-and-menu_gr_38.gif]
[Graphics:Images/thread-and-menu_gr_39.gif]

Listeners are set to menu items.

[Graphics:Images/thread-and-menu_gr_40.gif]
[Graphics:Images/thread-and-menu_gr_41.gif]
[Graphics:Images/thread-and-menu_gr_42.gif]

Sharing FrontEnd is started.

[Graphics:Images/thread-and-menu_gr_43.gif]
[Graphics:Images/thread-and-menu_gr_44.gif]
[Graphics:Images/thread-and-menu_gr_45.gif]
[Graphics:Images/thread-and-menu_gr_46.gif]

Summary

These figures were taken in the middle of evalution of handleMenuItem[ ] method in Mathematica.

[Graphics:Images/thread-and-menu_gr_47.gif]

[Graphics:Images/thread-and-menu_gr_48.gif]

[Graphics:Images/thread-and-menu_gr_49.gif]

As a result of this test, MathActionListener should not be used for long term calculation. ThreadMathActionListener was fine, though ThreadMathActionListener2 was not good.

Quit

[Graphics:Images/thread-and-menu_gr_50.gif]
[Graphics:Images/thread-and-menu_gr_51.gif]
[Graphics:Images/thread-and-menu_gr_52.gif]
[Graphics:Images/thread-and-menu_gr_53.gif]
[Graphics:Images/thread-and-menu_gr_54.gif]


Converted by Mathematica      November 4, 2002