📄 launcher.java
字号:
/* * (C) 2001 by Argonne National Laboratory * See COPYRIGHT in top-level directory. *//* * @author Anthony Chan */package viewer.launcher;import java.io.File;import java.io.InputStream;import java.io.InputStreamReader;import java.io.BufferedReader;import java.io.IOException;import java.io.FileNotFoundException;import java.io.FileInputStream;import java.io.FileOutputStream;import java.util.Properties;import java.util.StringTokenizer;import viewer.common.Dialogs;import viewer.common.RuntimeExecCommand;public class Launcher{ private static String setupfile_path = null; // Assume Unix convention. private static String FileSeparator = "/"; private static String PathSeparator = ":"; private static String JavaHome = null; private static String ClassPath = null; private static String UserHome = null; private static final String VERSION_INFO = "1.0.0.1"; private static String JVM = "java"; private static String JVM_OPTIONS = "-Xms64m -Xmx256m"; private static String VIEWER_JAR = "jumpshot.jar"; private static boolean VERBOSE = true; private static void initializeSystemProperties() { Properties sys_pptys; String ppty_str; sys_pptys = System.getProperties(); FileSeparator = sys_pptys.getProperty( "file.separator" ); PathSeparator = sys_pptys.getProperty( "path.separator" ); JavaHome = sys_pptys.getProperty( "java.home" ); ClassPath = sys_pptys.getProperty( "java.class.path" ); UserHome = sys_pptys.getProperty( "user.home" ); } private static void initializeLauncherConstants() { if ( FileSeparator.equals( "/" ) ) JVM = "java"; else JVM = "javaw.exe"; setupfile_path = UserHome + FileSeparator + ".jumpshot_launcher.conf"; } private static final String CONFIGURATION_HEADER = "# Jumpshot-4 Launcher setup file.\n" + "#VERSION_INFO: version-ID of the jumpshot-launcher.\n" + "#JVM: Java Virtual Machine name, can be absolute path.\n" + "#JVM_OPTIONS: JVM launch parameters.\n" + "#VIEWER_JAR: executable jar file to be launched.\n" + "#VERBOSE: be informative about this setup file change, " + "true(yes) or false(no).\n"; private static String readLauncherConstants() { Properties setup_pptys; String ppty_val; StringBuffer msgbuf; setup_pptys = new Properties(); try { FileInputStream fins = new FileInputStream( setupfile_path ); setup_pptys.load( fins ); fins.close(); } catch ( FileNotFoundException fioerr ) { return "This is your first time using the launcher.\n" + "A launcher setup file, " + setupfile_path + ",\n" + "will be created in your home directory."; } catch ( IOException ioerr ) { ioerr.printStackTrace(); System.exit( 1 ); } msgbuf = null; ppty_val = setup_pptys.getProperty( "VERSION_INFO" ); if ( ! VERSION_INFO.equals( ppty_val ) ) { msgbuf = new StringBuffer(); if ( ppty_val != null ) msgbuf.append( "Your setup file verion is " + ppty_val + ".\n"); else msgbuf.append( "Your setup file verion is older.\n" ); msgbuf.append( "This launcher version is " + VERSION_INFO +".\n" ); } ppty_val = setup_pptys.getProperty( "JVM" ); if ( ppty_val != null && !JVM.equals( ppty_val ) ) { if ( msgbuf == null ) msgbuf = new StringBuffer(); else msgbuf.append( "\n" ); msgbuf.append( "The default JVM, " + JVM + ",\n" + "is overriden by value, " + ppty_val + ",\n" + "specified in your setup file.\n" ); JVM = ppty_val; } ppty_val = setup_pptys.getProperty( "JVM_OPTIONS" ); if ( ppty_val != null && !JVM_OPTIONS.equals( ppty_val ) ) { if ( msgbuf == null ) msgbuf = new StringBuffer(); else msgbuf.append( "\n" ); msgbuf.append( "The default JVM_OPTIONS, " + JVM_OPTIONS + ",\n" + "is overriden by value, " + ppty_val + ",\n" + "specified in your setup file.\n" ); JVM_OPTIONS = ppty_val; } ppty_val = setup_pptys.getProperty( "VIEWER_JAR" ); if ( ppty_val != null && !VIEWER_JAR.equals( ppty_val ) ) { if ( msgbuf == null ) msgbuf = new StringBuffer(); else msgbuf.append( "\n" ); msgbuf.append( "The default VIEWER_JAR, " + VIEWER_JAR + ",\n" + "is overriden by value, " + ppty_val + ",\n" + "specified in your setup file.\n" ); VIEWER_JAR = ppty_val; } ppty_val = setup_pptys.getProperty( "VERBOSE" ); if ( ppty_val != null ) { VERBOSE = ppty_val.equalsIgnoreCase( "true" ) || ppty_val.equalsIgnoreCase( "yes" ); } if ( msgbuf != null ) return msgbuf.toString(); else return null; } private static void writeLauncherConstants() { Properties setup_pptys; setup_pptys = new Properties(); try { FileOutputStream fouts = new FileOutputStream( setupfile_path ); setup_pptys.setProperty( "VERSION_INFO", VERSION_INFO ); setup_pptys.setProperty( "JVM", JVM ); setup_pptys.setProperty( "JVM_OPTIONS", JVM_OPTIONS ); setup_pptys.setProperty( "VIEWER_JAR", VIEWER_JAR ); setup_pptys.setProperty( "VERBOSE", String.valueOf( VERBOSE ) ); setup_pptys.store( fouts, CONFIGURATION_HEADER ); fouts.close(); } catch ( IOException ioerr ) { ioerr.printStackTrace(); System.exit( 1 ); } } private static String getDefaultPathToJVM() { String path2jvm; File jvm_file; path2jvm = null; jvm_file = new File( JVM ); if ( jvm_file.isAbsolute() ) path2jvm = JVM; else path2jvm = JavaHome + FileSeparator + "bin" + FileSeparator + JVM; return path2jvm; } private static String getDefaultPathToJarDir() { StringTokenizer paths; String path; String path2jardir; int char_idx; // System.out.println( "ClassPath = " + ClassPath ); path2jardir = null; paths = new StringTokenizer( ClassPath, PathSeparator ); while ( paths.hasMoreTokens() && path2jardir == null ) { path = paths.nextToken(); char_idx = path.lastIndexOf( FileSeparator ); if ( char_idx >= 0 ) path2jardir = path.substring( 0, char_idx ); } return path2jardir; } private static String getDefaultJarPath( String prefix ) { if ( prefix != null && prefix.length() > 0 ) return prefix + FileSeparator + VIEWER_JAR; else return VIEWER_JAR; } private String exec( String[] exec_cmd_ary ) { Runtime runtime; Process proc; InputStreamThread proc_err_task, proc_out_task; StringBuffer proc_err_buf, proc_out_buf; int proc_istatus; proc_err_buf = new StringBuffer(); proc_out_buf = null; proc_istatus = 0; runtime = Runtime.getRuntime(); try { proc = runtime.exec( exec_cmd_ary ); proc_err_task = new InputStreamThread( proc.getErrorStream(), "Error", proc_err_buf ); proc_out_task = new InputStreamThread( proc.getInputStream(), "Output", proc_out_buf ); proc_err_task.start(); proc_out_task.start(); // Block THIS thread till process returns! proc_istatus = proc.waitFor(); // Clean up InputStreamThread's when the proces is done. proc_err_task.stopRunning(); proc_err_task = null; proc_out_task.stopRunning(); proc_out_task = null; if ( proc_istatus != 0 ) return proc_err_buf.toString(); } catch ( Throwable err ) { err.printStackTrace(); } return null; } public static final void main( String[] argv ) { String path2jardir; String path2jvm; String opt4jvm; String jar_path; RuntimeExecCommand exec_cmd; File jar_file; File jvm_file; Launcher launcher; String exec_err_msg; String setupfile_msg; Launcher.initializeSystemProperties(); Launcher.initializeLauncherConstants(); setupfile_msg = Launcher.readLauncherConstants(); if ( setupfile_msg != null ) { if ( Launcher.VERBOSE ) Dialogs.info( null, setupfile_msg, null ); Launcher.writeLauncherConstants(); } path2jardir = Launcher.getDefaultPathToJarDir(); jar_path = Launcher.getDefaultJarPath( path2jardir ); jar_file = new File( jar_path ); if ( ! jar_file.exists() ) { Dialogs.error( null, jar_path + " does not exist!\n" + "Make sure that " + VIEWER_JAR + " is in " + "the same directory as this launcher.\n" + "Then restart this program again." ); System.exit( 1 ); } if ( ! jar_file.canRead() ) { Dialogs.error( null, jar_path + " is NOT readable!\n" + "Reset the read privilege of the file, " + VIEWER_JAR + ".\n" + "Then restart this program again." ); System.exit( 1 ); } path2jvm = Launcher.getDefaultPathToJVM(); jvm_file = new File( path2jvm ); if ( ! jvm_file.exists() ) { Dialogs.error( null, path2jvm + " does not exist!\n" + "Make sure that " + path2jvm + " exists.\n" + "Then restart this program again." ); System.exit( 1 ); } if ( ! jvm_file.canRead() ) { Dialogs.error( null, path2jvm + " is NOT readable!\n" + "Reset the read privilege of the file, " + path2jvm + ".\n" + "Then restart this program again." ); System.exit( 1 ); } opt4jvm = JVM_OPTIONS; exec_cmd = new RuntimeExecCommand(); exec_cmd.addWholeString( path2jvm ); exec_cmd.addTokenizedString( opt4jvm ); exec_cmd.addWholeString( "-jar" ); exec_cmd.addWholeString( jar_path ); launcher = new Launcher(); if ( ( exec_err_msg = launcher.exec( exec_cmd.toStringArray() ) ) != null ) { Dialogs.error( null, "The following process exits with error:\n" + exec_cmd.toString() + "\n" + exec_err_msg ); System.exit( 1 ); } // Preventive System.exit() to guarantee the launcher exits cleanly System.exit( 0 ); } private class InputStreamThread extends Thread { private InputStream ins; private String prefix; private StringBuffer outbuffer; private boolean isRunning; public InputStreamThread( InputStream the_ins, String the_prefix, StringBuffer the_outbuffer ) { ins = the_ins; prefix = the_prefix; outbuffer = the_outbuffer; isRunning = true; } public void stopRunning() { isRunning = false; } public void run() { try { String line = null; InputStreamReader ins_rdr = new InputStreamReader( ins ); BufferedReader buf_rdr = new BufferedReader( ins_rdr ); while ( isRunning && ( line = buf_rdr.readLine() ) != null ) { System.out.println( prefix + " > " + line ); if ( outbuffer != null ) outbuffer.append( line + "\n" ); } } catch ( IOException ioerr ) { ioerr.printStackTrace(); } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -