File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
The moose likes Swing / AWT / SWT and the fly likes Updates to Java GUI when Running UNIX Shell Script Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Swing / AWT / SWT
Bookmark "Updates to Java GUI when Running UNIX Shell Script " Watch "Updates to Java GUI when Running UNIX Shell Script " New topic

Updates to Java GUI when Running UNIX Shell Script

Manuel Farias Hernandez

Joined: Jul 07, 2004
Posts: 8
I am writing a kind of install wizard, that I have named JInstall. This JInstall calls a UNIX shell script named install. This script, is the real installation program, and my JInstall is just a nice front end that gathers settings from the user, presents the License.txt file, etc. My JInstall extends JFrame, and uses several JPanels together with a CardLayout Manager to handle the different pages that the user has to go through, for example, a License Agreement Page, Directory Selection Page, and so on.

In the Install Page, I want to display the output from the install shell script in a JTextArea. My problem is that, the output from the shell script install is not simultaneously displayed as the install script runs. All the output is displayed when the script ends, and the scripts takes 1 - 2 minutes to run. Thus, my Java application seams to hang when the user clicks the Install button (a JButton ...).

Please note that my call of the install shell script, is done through the following steps:

runInstallShellScript() { cardPanel, "Install" );
SwingUtilities.invokeLater( this ); // To let the GUI be updated.

public void run() {
// Run the install script

The use of SwingUtilities.invokeLater is needed, as previously, the updates to the GUI did hang while the install script run. Now, the Install Page is displayed, and then starts the shell script.

So, thus somebody know what I should do? Maybe, there is a complete different approach to have when creating Java-GUI-shell-script-application.
Joe Ess

Joined: Oct 29, 2001
Posts: 9189

You didn't post nearly enough code to tell you for sure, but I can make some educated guesses. It sounds like a typical Swing threading issue. Which thread invokes the method run()? If you are invoking it from your install button action handler? If so you are hogging the Swing event thread and preventing updates. Do you invoke Process.waitFor()? That method blocks until the new process finishes and would also prevent GUI updates. You probably need to start 3 threads: one to spawn the new process and wait for it to finish and two threads to read from the output and error streams. Those streams have fixed-size buffers and if you don't clear them they can fill and prevent your process from completing. The swing event thread would then be free to make updates to the gui.

[How To Ask Questions On JavaRanch]
Ernest Friedman-Hill
author and iconoclast

Joined: Jul 08, 2003
Posts: 24199

Manuel --

This is precisely what you don't want to do. By using SwingUtilities.invokeLater(), you're specifically arranging for the install script to be run on the GUI thread, which blocks painting. You want the install script to run on another thread altogether.

Most likely you'd like to have a button press trigger the installation. What that button press should do would look something like

i.e., create a new Thread in which to run the installation, point it at the run() method in "this" object, and start it.

I'm moving this thread to the Swing/AWT forum, as (as Joe says) this is a typical Swing threading question and has nothing to do with Linux/UNIX.
[ July 12, 2004: Message edited by: Ernest Friedman-Hill ]

[Jess in Action][AskingGoodQuestions]
Manuel Farias Hernandez

Joined: Jul 07, 2004
Posts: 8
Hi folks! I am back!

Yes, I have been off, but now I have returned to the world of Java. I spend 2 hours to fresch up my mind, and to test the suggested solution. So I made a new prototype, and, yes, it functions! Thanks thanks thanks!

Now, I have another problem ... but that might be a new issue/topic.

Best regards,
I agree. Here's the link:
subject: Updates to Java GUI when Running UNIX Shell Script
It's not a secret anymore!