View Full Version : [Java]Errore a runtime che non capisco
Marco2000
06-04-2004, 09:06
Ho scritto questo pezzo di codice che mi richiama un EXE che si trova nella stessa cartella del sorgente:
public class Miomidchord
{
public static void main(String[]args)
{
String comando="midchord -half -fmt prova.mid prova2.mid";
runShell(comando);
System.out.println("sono tornato dal metodo");
}
public static boolean runShell ( String exe )
{
try
{
System.out.println("sono entrato nel metodo");
Runtime rt = Runtime.getRuntime();
System.out.println(exe);
Runtime.getRuntime().exec("midchord -half -fmt prova.mid prova2.mid" );
System.out.println("eseguito exec");
System.out.println("Finito " + exe);
}
catch(Exception e)
{
e.printStackTrace();
return false;
}
return true;
}
}
Il compilatore non da errori ma quando lo eseguo mi da l'errore che allego, intanto il programma termina "correttamente" (non esegue però l'EXE di cui prima).
Mi potete aiutare?
ntvdm.exe è la Windows 16-bit Virtual Machine...quel programma è un vecchio programma DOS? Potrebbe semplicemente non essere compatibile con Windows...
Marco2000
06-04-2004, 12:44
Si, è un porgramma per DOS ma se lo faccio partire da START->ESEGUI funziona correttamente....
Forse ho sbagliato qualcosa ne l codice ?
prova:
Runtime.getRuntime().exec("cmd /c start midchord -half -fmt prova.mid prova2.mid" );
Marco2000
06-04-2004, 12:52
GRAZIE!!
a cosa server /c ???
Ora devo solo trovare il sistema di scandire il contenuto di una directory per memorizzare in una stringa i nomi dei files midi.
Marco2000
06-04-2004, 13:17
Dunque, ho visto che quello che mi nteressa si trova su java.io.* solo che trovo riferimento per linux e non per windows....
mi sapete dire come potrei realizzare qualcosa del tipo:
String nomefile;
while(nella cartella c'è un file .mid)
{
nomefile=il nome del file;
}
Originariamente inviato da Marco2000
GRAZIE!!
a cosa server /c ???
Ora devo solo trovare il sistema di scandire il contenuto di una directory per memorizzare in una stringa i nomi dei files midi.
a chiudere il prompt di msdos quando finisce il prgramma che lanci :O
Originariamente inviato da Marco2000
Dunque, ho visto che quello che mi nteressa si trova su java.io.* solo che trovo riferimento per linux e non per windows....
mi sapete dire come potrei realizzare qualcosa del tipo:
File dir = new File("tua directory");
String[] lista = dir.list();
if (lista != null)
for (int i=0; i<lista.length; i++)
{
String nomefile = lista[i];
}
occhio che cosi' pero' visualizza anche le sottodirectory, se vuoi solo i file occorre complicare un attimo le cose...
Marco2000
06-04-2004, 13:36
Grazie, fin qui c'ero arrivato anche io solo che in listai] c'è il percorso assoluto mentre io vorrei solo il nome del file con l'estenzione ma senza il path.
Marco2000
06-04-2004, 14:14
Ho risolto con substring() però ho un altro problema e questo non so se sarà possibile risolverlo....
il programma DOS che richiamo carica senza problema qualsiasi file con nome più lungo anche di 8 caratteri ma non me lo risalva.
Se invece gli dico di salvare con un nome breve ce la fa....
Questo è risolvibile?
Originariamente inviato da Marco2000
Grazie, fin qui c'ero arrivato anche io solo che in listai] c'è il percorso assoluto mentre io vorrei solo il nome del file con l'estenzione ma senza il path.
File[] files = dir.listFiles();
for(ecc.ecc)
String file = files[i].getName();
Originariamente inviato da Marco2000
Ho risolto con substring() però ho un altro problema e questo non so se sarà possibile risolverlo....
il programma DOS che richiamo carica senza problema qualsiasi file con nome più lungo anche di 8 caratteri ma non me lo risalva.
Se invece gli dico di salvare con un nome breve ce la fa....
Questo è risolvibile?
se non e' in grado lui di risalvare non ci puoi fare nulla, penso ;)
Marco2000
06-04-2004, 14:43
Grazie mille!!!
Altro problema: se faccio partire molte istanze(ne ho provate 250) di cmd mi intasa il pc, il problema sicuramente è qui:
public static boolean runShell ( String exe )
{
try
{
Runtime rt = Runtime.getRuntime();
Runtime.getRuntime().exec(exe);
}
catch(Exception e)
{
e.printStackTrace();
return false;
}
return true;
}
C'è un comando, da mettere dopo la exec(exe), che aspetti l'esecuzione della cmd prima di passare alla successiva ???
public static boolean runShell ( String exe )
{
try
{
Runtime rt = Runtime.getRuntime(); //togli questa riga che non ti serve
Process p = Runtime.getRuntime().exec(exe);
p.waitFor();
}
catch(Exception e)
{
e.printStackTrace();
return false;
}
return true;
}
Marco2000
06-04-2004, 14:50
Grazie mille, l'avevo trovato ora ora su un sito ma mi dice anche di fare questo:
p.getInputStream().close();
p.getOutputStream().close();
p.getErrorStream().close();
serve ?
Marco2000
06-04-2004, 14:51
Originariamente inviato da cn73
Ti conviene dare un'occhiata ai Thread...
C'HO FURIA !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Originariamente inviato da kingv
public static boolean runShell ( String exe )
{
try
{
Runtime rt = Runtime.getRuntime(); //togli questa riga che non ti serve
Process p = Runtime.getRuntime().exec(exe);
p.waitFor();
}
catch(Exception e)
{
e.printStackTrace();
return false;
}
return true;
}
Questo è un argomento che mi interessa... Ma si possono effettuare chiamate tipo wait e fork di Unix?
Originariamente inviato da Marco2000
Grazie mille, l'avevo trovato ora ora su un sito ma mi dice anche di fare questo:
p.getInputStream().close();
p.getOutputStream().close();
p.getErrorStream().close();
serve ?
penso di no, lo dovrebbe fare in automatico
Marco2000
06-04-2004, 14:57
Si, funziona!!
Il mio problema è che siamo su windows, se ero su linux facevo un programmino in C con sleep,waitpid e cose varie ma qui non sapevo come muovermi !!!!!
Grazie ancora
Originariamente inviato da cn73
Questo è un argomento che mi interessa... Ma si possono effettuare chiamate tipo wait e fork di Unix?
ehm... no non son proprio la stessa cosa.
e poi in java un approccio del genere sarebbe pesantissimo
Se ti guardi i thread dovresti trovare questi metodi di tuo gradimento:
wait()
notify()
notifyAll()
yeld()
sleep()
...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.