ProcessBuilder

Status
Nicht offen für weitere Antworten.
G

Gast2

Gast
Hallo zusammen,

ich hab einen netio server im hintergrund laufen und würde gerne den clien folgendermaßen starten. Das Starten ist kein Problem die Übertragung funktiniert auch wunderbar. Doch bekomme ich auf der Konsole keine Ausgabe und weiß nicht wieso?!


Java:
			ProcessBuilder processBuilder = new ProcessBuilder("cmd", "/c" ,"netio",
					"-t" ,"localhost");
			processBuilder = processBuilder.redirectErrorStream(true);
			processClient = processBuilder.start();
		    Scanner s = new Scanner( processClient.getInputStream() ).useDelimiter( "\\Z" ); 
		    System.out.println( s.next() );
 
S

SlaterB

Gast
vielleicht paar Millisekunden warten/ Schleife bis Ende des Streams erreicht ist
 
G

Gast2

Gast
Java:
			Thread.sleep(100);
			String s = new BufferedReader(new InputStreamReader(processClient.getInputStream())).readLine(); 
			System.out.println( s );

kommt immer null als Ausgabe...
Ich verstehs nicht ganz er startet den Process und wenn dieser fertig mit übertargen ist wird er sofort wieder geschlossen... aber der Lesevorgang friert erst mal meine ganze GUI ein bis der Prozess übertargen ist aber es wir nichts eingelesen ...
 
S

SlaterB

Gast
steht was im ErrorStream des Prozesses?
(ich rate aber nur, weiß nicht genau worum es geht)
 
G

Gast2

Gast
Java:
processBuilder = processBuilder.redirectErrorStream(true);
dachte damit steht alles in einem Stream?
 
S

SlaterB

Gast
oh, ja eben: weiß nicht genau worum es geht ;)
hoffe es kann noch wer anders helfen

Java:
public class Test
{

    public static void main(String[] args)
        throws Exception
    {
        ProcessBuilder processBuilder = new ProcessBuilder("cmd", "/c", "dir");
        processBuilder = processBuilder.redirectErrorStream(true);
        Process processClient = processBuilder.start();
        Scanner s = new Scanner(processClient.getInputStream());
        while (s.hasNext())
        {
            System.out.println(s.nextLine());
        }

    }
}
funktioniert bei mir, Ausgabe wie in der Konsole,
auch mit ddir statt dir (Der Befehl konnte nicht gefunden werden..)

vielleicht liegt es an deinem next(), Scanner kann schon ziemlich nervig werden
 
Zuletzt bearbeitet von einem Moderator:
G

Gast2

Gast
mhm vielleicht steht auch nichts gescheites im stream, aber ich öffne ja eine konsole und da seh ich da die ausgaben und diese hätte ich gern ausgegeben...

Ja Scanner hab ich ja weggelassen hab anstatt nen read gemacht...
 

musiKk

Top Contributor
Warten sollte ja eigentlich nicht das Problem sein. Stream-I/O blockiert ja immer.
Probier mal
Java:
ProcessBuilder processBuilder = new ProcessBuilder("cmd", "/c" ,"netio -t localhost");
 
G

Gast2

Gast
ja des klappt aber leider hab ich jetzt keine konsole mehr sobald diese da ist klappt es nimmer
 
G

Gast2

Gast
mhm okay ich wollte mir meine konsole selber nachbasteln...

Java:
	public ProcessDialog(Component owner, Process process, String title, File out) {
		this.process = process;
		this.out = out;
		setLocationRelativeTo(owner);
		setTitle(title);
		installComponents();
	}

	private final void installComponents() {
		
		textArea = new JTextArea(10, 30);
		textArea.setWrapStyleWord(true);
		textArea.setEditable(false);
		textArea.setLineWrap(true);
		add(new JScrollPane(textArea), BorderLayout.CENTER);
		readThread = new Thread(new Runnable() {

			@Override
			public void run() {
				BufferedReader is = new BufferedReader(new InputStreamReader(
						process.getInputStream()));
				String line;
				try {
					while ((line = is.readLine()) != null && run) {
						final String line1 = line + "\n";
						SwingUtilities.invokeLater(new Runnable() {

							@Override
							public void run() {
								textArea.append(line1);

							}

						});
					}
				} catch (IOException e) {
					ErrorDialog.createErrorDialog(ProcessDialog.this, e);
				}
			}
		});
		pack();
	}

	public void stop() {
		process.destroy();
		run = false;
		this.dispose();
	}

ich übergeb den den prozess der angezeigt werden soll wenn ich process.destroy aufgerufen wird, dann wird er nicht zerstört wo liegt mein denkfehler?
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben