Copyright (c) 2002, Junzo SATO. All rights reserved.
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.
Nov 4th 2002
JLink is installed.
For Sun's j2sdk user on PC, setting CommandLine option should be required.
![[Graphics:Images/thread-and-menu_gr_2.gif]](Images/thread-and-menu_gr_2.gif)
MathJFrame is created.
![[Graphics:Images/thread-and-menu_gr_4.gif]](Images/thread-and-menu_gr_4.gif)
![[Graphics:Images/thread-and-menu_gr_6.gif]](Images/thread-and-menu_gr_6.gif)
![[Graphics:Images/thread-and-menu_gr_8.gif]](Images/thread-and-menu_gr_8.gif)
![[Graphics:Images/thread-and-menu_gr_9.gif]](Images/thread-and-menu_gr_9.gif)
JavaSwing is loaded.
![[Graphics:Images/thread-and-menu_gr_10.gif]](Images/thread-and-menu_gr_10.gif)
Menu bar is created.
![[Graphics:Images/thread-and-menu_gr_11.gif]](Images/thread-and-menu_gr_11.gif)
Menu is added.
![[Graphics:Images/thread-and-menu_gr_13.gif]](Images/thread-and-menu_gr_13.gif)
![[Graphics:Images/thread-and-menu_gr_15.gif]](Images/thread-and-menu_gr_15.gif)
![[Graphics:Images/thread-and-menu_gr_17.gif]](Images/thread-and-menu_gr_17.gif)
![[Graphics:Images/thread-and-menu_gr_19.gif]](Images/thread-and-menu_gr_19.gif)
Menu item handler is defined.
![[Graphics:Images/thread-and-menu_gr_21.gif]](Images/thread-and-menu_gr_21.gif)
Action listeners are created.
![[Graphics:Images/thread-and-menu_gr_22.gif]](Images/thread-and-menu_gr_22.gif)
![[Graphics:Images/thread-and-menu_gr_24.gif]](Images/thread-and-menu_gr_24.gif)
![[Graphics:Images/thread-and-menu_gr_26.gif]](Images/thread-and-menu_gr_26.gif)
![[Graphics:Images/thread-and-menu_gr_28.gif]](Images/thread-and-menu_gr_28.gif)
![[Graphics:Images/thread-and-menu_gr_30.gif]](Images/thread-and-menu_gr_30.gif)
![[Graphics:Images/thread-and-menu_gr_32.gif]](Images/thread-and-menu_gr_32.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]](Images/thread-and-menu_gr_34.gif)
![[Graphics:Images/thread-and-menu_gr_36.gif]](Images/thread-and-menu_gr_36.gif)
![[Graphics:Images/thread-and-menu_gr_38.gif]](Images/thread-and-menu_gr_38.gif)
Listeners are set to menu items.
![[Graphics:Images/thread-and-menu_gr_40.gif]](Images/thread-and-menu_gr_40.gif)
![[Graphics:Images/thread-and-menu_gr_41.gif]](Images/thread-and-menu_gr_41.gif)
![[Graphics:Images/thread-and-menu_gr_42.gif]](Images/thread-and-menu_gr_42.gif)
Sharing FrontEnd is started.
![[Graphics:Images/thread-and-menu_gr_43.gif]](Images/thread-and-menu_gr_43.gif)
These figures were taken in the middle of evalution of handleMenuItem[ ] method in Mathematica.
As a result of this test, MathActionListener should not be used for long term calculation. ThreadMathActionListener was fine, though ThreadMathActionListener2 was not good.
![[Graphics:Images/thread-and-menu_gr_50.gif]](Images/thread-and-menu_gr_50.gif)
![[Graphics:Images/thread-and-menu_gr_51.gif]](Images/thread-and-menu_gr_51.gif)
![[Graphics:Images/thread-and-menu_gr_52.gif]](Images/thread-and-menu_gr_52.gif)
![[Graphics:Images/thread-and-menu_gr_54.gif]](Images/thread-and-menu_gr_54.gif)