From e798d3f348e4b188c290cdf87116a3aa56cda37f Mon Sep 17 00:00:00 2001 From: Sebastien Lugan Date: Tue, 17 Feb 2004 16:33:43 +0000 Subject: Initial revision --- j2kviewer/src/Exec.java | 212 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 212 insertions(+) create mode 100644 j2kviewer/src/Exec.java (limited to 'j2kviewer/src/Exec.java') diff --git a/j2kviewer/src/Exec.java b/j2kviewer/src/Exec.java new file mode 100644 index 00000000..c8b09abc --- /dev/null +++ b/j2kviewer/src/Exec.java @@ -0,0 +1,212 @@ +import java.io.*; + +// This appears in Core Web Programming from +// Prentice Hall Publishers, and may be freely used +// or adapted. 1997 Marty Hall, hall@apl.jhu.edu. + +/** A class that eases the pain of running external + * processes from applications. + * Lets you run a program three ways: + *
    + *
  1. exec: Execute the command, returning + * immediately even if the command is still + * running. This would be appropriate + * for printing a file. + *
  2. execWait: Execute the command, but + * don't return until the command finishes. + * This would be appropriate for + * sequential commands where the first depends + * on the second having finished (e.g. + * javac followed by + * java). + *
  3. execPrint: Execute the command and + * print the output. This would be appropriate + * for the UNIX command ls. + *
+ * Note that the PATH is not taken into account, + * so you must specify the full pathname to + * the command, and shell builtin commands + * will not work. For instance, on Unix the above + * three examples might look like: + *
    + *
  1. Exec.exec("/usr/ucb/lpr Some-File");
    + *
  2. + *        Exec.execWait("/usr/local/bin/javac Foo.java");
    + *        Exec.execWait("/usr/local/bin/java Foo");
    + *        
    + *
  3. Exec.execPrint("/usr/bin/ls -al");
    + *
+ * + * @author Marty Hall + * ( + * hall@apl.jhu.edu) + * @version 1.0 1997 + */ + +public class Exec { + //---------------------------------------------------- + + private static boolean verbose = true; + + /** Determines if the Exec class should print which + * commands are being executed, and print error + * messages if a problem is found. Default is true. + * + * @param verboseFlag true: print messages. + * false: don't. + */ + + public static void setVerbose(boolean verboseFlag) { + verbose = verboseFlag; + } + + /** Will Exec print status messages? */ + + public static boolean getVerbose() { + return(verbose); + } + + //---------------------------------------------------- + /** Starts a process to execute the command. Returns + * immediately, even if the new process is still + * running. + * + * @param command The full pathname of the + * command to be executed. No shell builtins + * (e.g. "cd") or shell meta-chars (e.g. ">") + * allowed. + * @return false if a problem is known to occur, but + * since this returns immediately, problems + * aren't usually found in time. + * Returns true otherwise. + */ + + public static boolean exec(String command) { + return(exec(command, false, false)); + } + + //---------------------------------------------------- + /** Starts a process to execute the command. Waits + * for the process to finish before returning. + * + * @param command The full pathname of the + * command to be executed. No shell builtins + * or shell meta-chars allowed. + * @return false if a problem is known to occur, + * either due to an exception or from the + * subprocess returning a non-zero value. + * Returns true otherwise. + */ + + public static boolean execWait(String command) { + return(exec(command, false, true)); + } + + //---------------------------------------------------- + /** Starts a process to execute the command. Prints + * all output the command gives. + * + * @param command The full pathname of the + * command to be executed. No shell builtins + * or shell meta-chars allowed. + * @return false if a problem is known to occur, + * either due to an exception or from the + * subprocess returning a non-zero value. + * Returns true otherwise. + */ + + public static boolean execPrint(String command) { + return(exec(command, true, false)); + } + + //---------------------------------------------------- + // This creates a Process object via + // Runtime.getRuntime.exec(). Depending on the + // flags, it may call waitFor on the process + // to avoid continuing until the process terminates, + // or open an input stream from the process to read + // the results. + + private static boolean exec(String command, + boolean printResults, + boolean wait) { + if (verbose) { + printSeparator(); + System.out.println("Executing '" + command + "'."); + } + try { + // Start running command, returning immediately. + Process p = Runtime.getRuntime().exec(command); + + // Print the output. Since we read until + // there is no more input, this causes us + // to wait until the process is completed + if(printResults) { + BufferedInputStream buffer = + new BufferedInputStream(p.getInputStream()); + DataInputStream commandResult = + new DataInputStream(buffer); + String s = null; + try { + while ((s = commandResult.readLine()) != null) + System.out.println("Output: " + s); + commandResult.close(); + if (p.exitValue() != 0) { + if (verbose) + printError(command + + " -- p.exitValue() != 0"); + return(false); + } + // Ignore read errors; they mean process is done + } catch (Exception e) {} + + // If you don't print the results, then you + // need to call waitFor to stop until the process + // is completed + } else if (wait) { + try { + System.out.println(" "); + int returnVal = p.waitFor(); + if (returnVal != 0) { + if (verbose) + printError(command); + return(false); + } + } catch (Exception e) { + if (verbose) + printError(command, e); + return(false); + } + } + } catch (Exception e) { + if (verbose) + printError(command, e); + return(false); + } + return(true); + } + + //---------------------------------------------------- + + private static void printError(String command, + Exception e) { + System.out.println("Error doing exec(" + + command + "): " + e.getMessage()); + System.out.println("Did you specify the full " + + "pathname?"); + } + + private static void printError(String command) { + System.out.println("Error executing '" + + command + "'."); + } + + //---------------------------------------------------- + + private static void printSeparator() { + System.out.println + ("=============================================="); + } + + //---------------------------------------------------- +} -- cgit v1.2.3