Avatar billede assembler Nybegynder
05. august 2002 - 12:28 Der er 2 kommentarer og
1 løsning

Dos og interaction med Java.......

Der findes nogle statements man kan bruge, når man skal skal køre andre programmer

java.lang.runtime.exec("executable filename")

http://developer.java.sun.com/developer/qow/archive/68/

import Java.lang.*;
import Java.io.*;

public class RuntimeExecTest {
public static void main(String[] args) {
Runtime rt = Runtime.getRuntime();
String[] callAndArgs = { "Notepad.exe","D:\\TEMP\\Test.txt" };
try {
Process child = rt.exec(callAndArgs);
child.waitFor();
System.out.println("Process exit code is:
  " + child.exitValue());
}
catch(IOException e) {
System.err.println(
"IOException starting process!");
}
catch(InterruptedException e) {
System.err.println(
"Interrupted waiting for process!");
}
}
}
De medfødte functioner i DoSprompten (ping, FTP, netstat og tracert) viser imidlertid ingen feed back, dvs at hvis følgende bliver brugt, udføres functionen korrekt, men de statestikker som funktionen normalt ville vise er ikke tilstede.

String[] callAndArgs = { "ping", "192.168.1.1" };
String[] callAndArgs = { "ping", "/c start ping" };

dvs at følgende statement ikke er tilfredstillende:: !!

String[] callAndArgs = { "cmd", "/c start cmd" };

Mine spørgsmål er:
1)
Hvordan får jeg Dos'en til at vise resultaterne ?

2) hvordan returnnere jeg resultaterne til minapplikation, så jeg eksempelvis kan lægge dem i et TextArea?

Da jeg er igang med at lave en lille ftp client, har jeg også fundet ud af nogle andre problemer med Runtime exec løsningen....

eksempel... hvis man kører en java applikation og sætter antallet af echo requests i en pingning til mere end 5, vil systemet gå istå.

1)
Hvorfor?
2)
kan dette løses?
Avatar billede carstenknudsen Nybegynder
05. august 2002 - 12:58 #1
Du får fat i resultatet som følger:
Process p = Runtime.getRuntime().exec( "cls" );                       
InputStream pin = p.getErrorStream();                         
InputStreamReader cin = new InputStreamReader( pin );                         
BufferedReader in = new BufferedReader( cin );                         
String s;                         
if ( ( s = in.readLine() ) != null ) {                             
System.out.println( "Det virkede ikke");                             
System.out.println( s );                             
while ( ( s = in.readLine() ) != null ) {                                 
System.out.println( s );                             
}                         
}                         
else {                             
System.out.println( "Det virkede." );                         
}
så kan du gøre med det der kommer som du lyster.
Det besvarer 1+2 idet du bare opsamler det der kommer
i en StringBuffer og så kalder du toString() på den
og smider den i et JTextArea.
Avatar billede carstenknudsen Nybegynder
05. august 2002 - 13:01 #2
Du skal bruge getInputStream for at læse resultatet,
getErrorStream returnerer naturligvis evt. fejl.
Avatar billede assembler Nybegynder
06. august 2002 - 12:25 #3
Yepper, er den samme løsning som de har foreslået på sun ;-)
så derfor accepteret...... bruger nu selv følgende..

BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));    String procOutput = "";            while ((procOutput = in.readLine()) != null) {                System.out.println(procOutput);

og som du siger, ligger de ønskede oplysninger nu i en String, og er derfor intet problem at overføre til en Gui.
Mange tak for det hurtige svar..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester