final DataInputStream stream= new DataInputStream(process.getInputStream());
StringBuffer buffer= new StringBuffer(); BufferedReader reader= new BufferedReader(new InputStreamReader(process.getInputStream()));
		public final void run(final VMRunnerConfiguration configuration, final ILaunch launch, final IProgressMonitor monitor) throws CoreException {			Assert.isNotNull(configuration);			Assert.isNotNull(launch);			Assert.isNotNull(monitor);			final IProgressMonitor subMonitor= new SubProgressMonitor(monitor, 1);			subMonitor.beginTask(CorrectionMessages.SerialVersionLaunchConfigurationDelegate_launching_vm, 2);			try {				subMonitor.subTask(CorrectionMessages.SerialVersionLaunchConfigurationDelegate_constructing_command_line);				final List arguments= new ArrayList();				arguments.add(getJavaExecutable(configuration));				final String[] vmArguments= combineVmArgs(configuration, fInstall);				for (int index= 0; index < vmArguments.length; index++)					arguments.add(vmArguments[index]);				String[] bootClassPath= configuration.getBootClassPath();				final String[] classPath= configuration.getClassPath();				String[] combinedClassPath= null;				LibraryLocation[] locations= null;				if (bootClassPath == null) {					locations= JavaRuntime.getLibraryLocations(fInstall);					bootClassPath= new String[locations.length];					for (int index= 0; index < locations.length; index++)						bootClassPath[index]= locations[index].getSystemLibraryPath().toOSString();				}				combinedClassPath= new String[bootClassPath.length + classPath.length];				int offset= 0;				for (int index= 0; index < bootClassPath.length; index++) {					combinedClassPath[offset]= bootClassPath[index];					offset++;				}				for (int index= 0; index < classPath.length; index++) {					combinedClassPath[offset]= classPath[index];					offset++;				}				if (combinedClassPath.length > 0) {					arguments.add("-classpath"); //$NON-NLS-1$					arguments.add(flattenClassPath(combinedClassPath));				}				arguments.add(configuration.getClassToLaunch());				final String[] programArguments= configuration.getProgramArguments();				for (int index= 0; index < programArguments.length; index++)					arguments.add(programArguments[index]);				final String[] commandLine= new String[arguments.size()];				arguments.toArray(commandLine);				if (monitor.isCanceled())					return;				subMonitor.worked(1);				subMonitor.subTask(CorrectionMessages.SerialVersionLaunchConfigurationDelegate_starting_vm);				final Process process= exec(commandLine, null);				if (process != null) {					final DataInputStream stream= new DataInputStream(process.getInputStream());					try {						fSerialVersionID= stream.readLong();					} catch (IOException exception) {						JavaPlugin.log(exception);						fErrorMessage= exception.getLocalizedMessage();					}					final StringBuffer buffer= new StringBuffer();					final BufferedReader reader= new BufferedReader(new InputStreamReader(process.getErrorStream()));					try {						String line= null;						while (reader.ready()) {							line= reader.readLine();							if (line.startsWith(ERROR_PREFIX))								buffer.append(line.substring(ERROR_PREFIX.length()));						}						fErrorMessage= buffer.toString();					} catch (IOException exception) {						JavaPlugin.log(exception);						fErrorMessage= exception.getLocalizedMessage();					}					if (monitor.isCanceled())						process.destroy();				}			} finally {				subMonitor.done();			}		}