Controlando um java.lang.Process

Bom dia caros amigos e amigas.

Tenho uma aplicação que passa uma informação(caminho de uma imagem) para outra aplicação(aplicação externa), toda vez que um botão específico da primeira aplicação é pressionado.

Essa ação provoca o recarregamento da aplicação externa toda vez que o botão é pressionado. Preciso evitar este resultado, recarregar a aplicaçao externa.

Segue o código do método que é executado á partir da ação do botão:

public static void openview(String NameFile) {
                FileWriter filejn = null;
                try {
                        String filejnlp;
                        filejnlp = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
                                        + "<!-- JNLP File for DicomImageViewer -->"
                                        + "<jnlp"
                                        + " codebase=\"http://www.dclunie.com/pixelmed/software/webstart\""
                                        + " href=\"DicomImageViewer.jnlp\">"
                                        + " <information>"
                                        + " <title>DicomImageViewer</title>"
                                        + " <vendor>PixelMed Publishing</vendor>"
                                        + " <homepage href=\"javadoc/index.html\"/>"
                                        + " <description>DicomImageViewer Application</description>"
                                        + " <description kind=\"short\">A simple DICOM image and spectroscopy viewer.</description>"
                                        + " <icon href=\"icons/DicomImageViewer.png\"/>"
                                        + " <offline-allowed/> "
                                        + " </information>"
                                        + " <security>"
                                        + " <all-permissions/>"
                                        + " </security>"
                                        + " <resources>"
                                        + " <j2se version=\"1.5+\" java-vm-args=\"-Xmx512m\"/>"
                                        + " <jar href=\"pixelmed.jar\"/>"
                                        + "        <jar href=\"commons-codec-1.3.jar\" download=\"eager\"/>"
                                        + "        <jar href=\"hsqldb.jar\" download=\"lazy\"/>"
                                        + "        <jar href=\"jmdns.jar\" download=\"lazy\"/>"
                                        + "        <jar href=\"excalibur-bzip2-1.0.jar\" download=\"lazy\"/>"
                                        + "        <jar href=\"vecmath1.2-1.14.jar\" download=\"lazy\"/>"
                                        + "        <!--extension href=\"http://download.java.net/media/jai-imageio/webstart/release/jai-imageio-1.1.jnlp\"/-->"
                                        + "        <!--extension href=\"http://download.java.net/media/jai-imageio/webstart/early-access/jai-imageio-1.1.jnlp\"/-->"
                                        + "        <extension href=\"http://www.dclunie.com/pixelmed/software/webstart/jai-imageio-1.1_DAC.jnlp\"/>"
                                        + " </resources>"
                                        + " <application-desc main-class=\"com.pixelmed.display.DicomImageViewer\">"
                                        + " <argument>" + NameFile + "</argument> "
                                        + " </application-desc>" + "</jnlp> ";

                        String filetmp = System.getProperty("java.io.tmpdir") + "/tmp.jnlp";
                        System.out.println(filetmp);
                        filejn = new FileWriter(filetmp);
                        BufferedWriter out = new BufferedWriter(filejn);
                        out.write(filejnlp);
                        out.close();
                        // Process p =
                        // Runtime.getRuntime().exec("rundll32 SHELL32.DLL,ShellExec_RunDLL "+filetmp);
                        Process p = Runtime.getRuntime().exec(
                                        new String[] { "javaws", filetmp });
                        try {
                                int exitVal = p.waitFor();
                                System.out.println("Process exitValue: " + exitVal);
                        } catch (InterruptedException ex) {
                                Logger.getLogger("ERRO");
                        }
                } catch (IOException ex) {
                        Logger.getLogger(TelaView.class.getName()).log(Level.SEVERE, null,
                                        ex);
                } finally {
                        try {
                                filejn.close();
                        } catch (IOException ex) {
                                Logger.getLogger(TelaView.class.getName()).log(Level.SEVERE,
                                                null, ex);
                        }
                }

Para tentar “evitar o recarregamento”, coloquei todo o método em um bloco estático com o intuito de adormecer o processo (java.lang.process) p,
que aparece no código fonte acima, neste caso coloquei este variável no escopo de classe, no código acima ela está no escopo do método.

static{
		
		FileWriter filejn = null;

		try {
			
		    filejnlp = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
					+ "<!-- JNLP File for DicomImageViewer -->"
					+ "<jnlp"
					+ "  codebase=\"http://www.dclunie.com/pixelmed/software/webstart\""
					+ "  href=\"DicomImageViewer.jnlp\">"
					+ "  <information>"
					+ "    <title>DicomImageViewer</title>"
					+ "    <vendor>PixelMed Publishing</vendor>"
					+ "    <homepage href=\"javadoc/index.html\"/>"
					+ "    <description>DicomImageViewer Application</description>"
					+ "    <description kind=\"short\">A simple DICOM image and spectroscopy viewer.</description>"
					+ "    <icon href=\"icons/DicomImageViewer.png\"/>"
					+ "    <offline-allowed/> "
					+ "  </information>"
					+ "  <security>"
					+ "      <all-permissions/>"
					+ "  </security>"
					+ "  <resources>"
					+ "    <j2se version=\"1.5+\" java-vm-args=\"-Xmx512m\"/>"
					+ "    <jar href=\"pixelmed.jar\"/>"
					+ "	<jar href=\"commons-codec-1.3.jar\" download=\"eager\"/>"
					+ "	<jar href=\"hsqldb.jar\" download=\"lazy\"/>"
					+ "	<jar href=\"jmdns.jar\" download=\"lazy\"/>"
					+ "	<jar href=\"excalibur-bzip2-1.0.jar\" download=\"lazy\"/>"
					+ "	<jar href=\"vecmath1.2-1.14.jar\" download=\"lazy\"/>"
					+ "	<!--extension href=\"http://download.java.net/media/jai-imageio/webstart/release/jai-imageio-1.1.jnlp\"/-->"
					+ "	<!--extension href=\"http://download.java.net/media/jai-imageio/webstart/early-access/jai-imageio-1.1.jnlp\"/-->"
					+ "	<extension href=\"http://www.dclunie.com/pixelmed/software/webstart/jai-imageio-1.1_DAC.jnlp\"/>"
					+ "  </resources>"
					+ "  <application-desc main-class=\"com.pixelmed.display.DicomImageViewer\">"
					//+ "    <argument>" + (nameFile.isEmpty()?new String("Teste"):nameFile)+ "</argument> "
					+ "  </application-desc>" + "</jnlp> ";
		    
		    getFiletmp();
		    
			System.out.println(filetmp);
			
			filejn = new FileWriter(filetmp);
			
			BufferedWriter out = new BufferedWriter(filejn);
			out.write(filejnlp);
			out.close();
			
			p = Runtime.getRuntime().exec(
					new String[] { "javaws", filetmp });
			
			try {
				synchronized (p) {
					p.wait();
				}
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
					
		} catch (IOException e) {
			
			e.printStackTrace();
			
	}finally {
		
		try {
			
			filejn.close();
			
		} catch (IOException ex) {
			
			Logger.getLogger(TelaView.class.getName()).log(Level.SEVERE,
					null, ex);
		}
	}
		
	}

Assim, no método openView(…), desejaria apenas “acordar” o processo e passar a nova informação como parâmetro. Não conseguí programar este método,
não sei como considerar a mesma instância do processo que foi carregado inicialmente de acordo com a transformação(coloquei o carregamento da aplicação externo como estático).

Assim me falta idéias para gerir o processo e o método openView(…) a ser produzido.

public static void openview(String NameFile) {
		
		try {
			
			setNameFile(NameFile);
			
			//TODO acordar processo e abrir a imagem
			
	         // get the input stream of the process and print it
	         InputStream in = p.getInputStream();
	         try {
				for (int i = 0; i < in.available(); i++) {
				    System.out.println("" + in.read());
				 }
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

			
			int exitVal = p.waitFor();
				
			System.out.println("Process exitValue: " + exitVal);
			
		} catch (InterruptedException ex) {
			Logger.getLogger(TelaView.class.getName()).log(Level.SEVERE, null,
					ex);
		} catch (RuntimeException ex2){
			Logger.getLogger(TelaView.class.getName()).log(Level.SEVERE, null,
					ex2);
		}

	}

Alguém sabe me ajudar?

Um abraço.