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.