|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jul 2005
Messaggi: 584
|
leseguire un programma da java
è possibile con il java eseguire un file, allego un esempio che feci in c (questo serviva per eseguire in linux un file audio da un programma scritto in c e testava prima se il file esisteva)
printf("\n"); test_file=open("pippo.wav",O_RDONLY); if(test_file!=-1) // file aperto con successo { close(test_file); system("play pippo.wav"); } // else // printf("errore apertura file 'pippo.wav'\n"); io dovrei fare dopo aver verificato se il file esiste: programmaeseguibile filedaaprire.xxx > output.txt
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
In Java 6
Codice:
if(file.exists()) {
Desktop.open(file);
}
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jul 2006
Città: Tristram
Messaggi: 517
|
Oppure, se ti serve qualcosa di modulare, lo compili come dll e lo richiami tramite JNI
__________________
Il sole è giallo |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Jul 2005
Messaggi: 584
|
Quote:
String file="filedaaprire.xxx" if(file.exists()) { Desktop.open(programmaeseguibile filedaaprire.xxx > output.txt); } puoi dirmi quali sono le librerie da aggiungere io ho java 1.5.0_11 n.b. programmaeseguibile è un eseguibile x ms-dos |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Se usi Java 5 devi scaricare JDIC (è il nome di una libreria, Java Desktop Integration Component).
https://jdic.dev.java.net/ Penso tuttavia che ti convenga passare a Java 6. Non è solo una questione di librerie, ci sono anche tante novità nel sistema che rendono realmente vantaggioso il passaggio, anche a costo di scavalcare il motto entreprise "oggi meno tre". Quel che Desktop.open fa è chiedere al desktop manager di "fare quello che di solito farebbe con quel file". Non so come si comporti Windows con gli eseguibili DOS. Ma se li esegue allora li esegue anche Desktop. Se usi Java 6, il codice è quello che ho indicato e che specifico maggiormento qui: Codice:
File file = new File(...);
if(file.exists()) {
try {
java.awt.Desktop.open(file);
} catch(IOException ex) {
ex.printStackTrace();
}
}
Codice:
File file = new File(...);
if(file.exists()) {
try {
org.jdesktop.jdic.desktop.Desktop.open(file);
} catch(IOException ex) {
ex.printStackTrace();
}
}
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
P.s.: se ti interessa catturare l'output del programma dos allora Desktop non va più bene e dei passare a ProcessBuilder.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Jul 2005
Messaggi: 584
|
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
poco pensato ma funziona. Qui si suppone che nella directory di lavoro esista un programma "ponziponzo.bat". Il programma Java lancia un processo che esegue quel programma e ne cattura l'output. L'output è catturato da OutputGrabber in un Thread a parte. Quell'output è poi rispedito allo standard output il che parifica l'utilità di questo programma ad una forchetta senza denti.
Codice:
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) {
File workingDir = new File(System.getProperty("user.dir"));
ProcessBuilder processBuilder = new ProcessBuilder("ponziponzi.bat");
try {
Process process = processBuilder.start();
new OutputGrabber(process.getInputStream());
} catch(Exception ex) {
ex.printStackTrace();
}
}
}
class OutputGrabber {
private final Scanner IN;
private final Thread RUNNER;
public OutputGrabber(InputStream in) {
IN = new Scanner(in);
RUNNER = new Thread(TASK);
RUNNER.start();
}
private final Runnable TASK = new Runnable() {
public void run() {
try {
while(IN.hasNextLine()) {
System.console().printf("Grab line: %s%n", IN.nextLine());
}
} finally {
IN.close();
}
}
};
}
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Jul 2005
Messaggi: 584
|
nel mio caso l'output del programma avviene soltanto facendo così
programmaeseguibile filedaaprire.xxx > output.txt esempio se il programma è pippo.exe devo fare pippo ciccio.zzz > finito.txt è praticamente un programma a linea di comando che funziona nel modo che ti ho detto, il file txt lo genera lui utilizzando "> output.txt" come posso adattare "pippo ciccio.zzz > finito.txt" per farlo eseguire al mio programma java!!! grazie!!! |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Con ProcessBuilder sarebbe:
ProcessBuilder processBuilder = new ProcessBuilder("pippo", "ciccio.zzz", ">", "finito.txt"); processBuilder.start();
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Jul 2005
Messaggi: 584
|
ho provato
import java.io.*; import java.util.*; public class Main { public static void main(String[] args) { File workingDir = new File(System.getProperty("user.dir")); ProcessBuilder processBuilder = new ProcessBuilder("ponziponzi.bat"); try { Process process = processBuilder.start(); // new OutputGrabber(process.getInputStream()); } catch(Exception ex) { ex.printStackTrace(); } } } ma risulta questo errore Main.java:8: cannot find symbol symbol : constructor ProcessBuilder(java.lang.String) location: class java.lang.ProcessBuilder ProcessBuilder processBuilder = new ProcessBuilder("ponziponzi.bat"); ^ 1 error inoltre se volessi verificare l'effettiva esistenza del file ponziponzi.bat come fare???
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Dai un'occhiata alla documentazione java di ProcessBuilder per Java 5 perchè io ora ho sottomano solo quella di Java 6 e mi dice che quel costruttore c'è (e c'era anche prima).
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#13 |
|
Member
Iscritto dal: Oct 2004
Messaggi: 54
|
io farei così:
import java.lang.*; { ... Process p; try { p = Runtime.getRuntime().exec("file.exe"); p.waitFor(); } catch(Exception e){ return;} InputStreamReader isr = new InputStreamReader(p.getInputStream()); BufferedReader br = new BufferedReader(isr); ... } spero ti giri, mi pare che i metodi siano in jdk 1.5 CIAO! |
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Jul 2005
Messaggi: 584
|
x aenema82 ... ho dovuto mettere pippo al posto di p perche avavo l'errore: p is already defined in main(java.lang.String[]), cmq così funziona grazie!!!
import java.io.*; import java.util.*; import java.lang.*; public class Main { public static void main(String[] args) { Process p; try { Process pippo; pippo = Runtime.getRuntime().exec("notepad.exe"); pippo.waitFor(); } catch(Exception e) {return;} // InputStreamReader isr = new InputStreamReader(p.getInputStream()); // BufferedReader br = new BufferedReader(isr); } } x PGI-Bis Quote:
http://java.sun.com/j2se/1.5.0/docs/...ssBuilder.html come dovrei modificare il codice (che riporto sotto) che mi hai inviato e dava l'errore import java.io.*; import java.util.*; public class Main { public static void main(String[] args) { File workingDir = new File(System.getProperty("user.dir")); ProcessBuilder processBuilder = new ProcessBuilder("ponziponzi.bat"); try { Process process = processBuilder.start(); // new OutputGrabber(process.getInputStream()); } catch(Exception ex) { ex.printStackTrace(); } } } grazie!!!
Ultima modifica di hello : 14-05-2007 alle 12:42. |
|
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Il tuo codice è corretto.
Se usi un IDE, controlla che le opzioni del progetto non dichiarino la compatibilità con la versione 1.4 di Java. Altrimenti controlla di non avere l'opzione "-source 1.4" tra quelle di compilazione.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Jul 2005
Messaggi: 584
|
ho provato con NetBeans 5.5 e funziona!!!
grazie!!! |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:34.




















