Netzwerkdrucker Verbindungstool

Status
Nicht offen für weitere Antworten.

raumgleita

Neues Mitglied
Morgen allerseits!

Ich suche eine eifach Lösung für folgendes Szenario. Das Programm soll das hinzufügen von Netzwerkdruckern erleichtern (also ohne Windows Assistent).
Ich habe bereits mit Java ein GUI erstellt in welchem man einen Druckernamen angeben kann. Mit einem Radio Button kann zusätzlich wählen ob man den angegebenen Drucker als Standard einrichten will.

Den Drucker füge ich mittels Batchbefehl mit einem Runtime Objekt hinzu.


Code:
command = "rundll32 printui.dll,PrintUIEntry /in /n \\\\druckerserver\\name 2>nul";
Runtime rt = Runtime.getRuntime();
rt.exec(command);
Das funktioniert soweit alles. Das Problem ist, wenn der angegebene Drucker nicht existiert. Dann erscheint eine Fehlermeldung die ich weder mit Java noch mit einem Batchbefehl abfangen/unterdrücken kann (Windows cannot connect to the printer...).

Gibt es eine Möglichkeit, Netzwerkdrucker mit einer Funktion zu verbinden damit man auch Fehler abfangen kann. Oder zuerst den Netzwerkpfad überprüfen und falls kein Drucker gefunden wird, Drucker mit ähnlichem Namen verbinden.

Gruss
raumgleita
 

raumgleita

Neues Mitglied
Vielen Dank für den Hinweis. Ich habe mich etwas schlau darüber gemacht doch irgend etwas mache ich noch falsch.

Also ich habe die StreamGobbler Klasse, welcher unter der GNU veröffentlicht wurde, gefunden:

Code:
class StreamGobbler extends Thread
{
	InputStream is;
	String type;
	OutputStream os;
	
	StreamGobbler(InputStream is, String type)
	{
		this(is, type, null);
	}
	StreamGobbler(InputStream is, String type, OutputStream redirect)
	{
		this.is = is;
		this.type = type;
		this.os = redirect;
	}
	
	public void run()
	{
		try
		{
			PrintWriter pw = null;
			if (os != null)
				pw = new PrintWriter(os);
				
			InputStreamReader isr = new InputStreamReader(is);
			BufferedReader br = new BufferedReader(isr);
			String line=null;
			while ( (line = br.readLine()) != null)
			{
				if (pw != null)
					pw.println(line);
				System.out.println(line);	
			}
			if (pw != null)
				pw.flush();
		} catch (IOException ioe)
			{
			ioe.printStackTrace();  
			}
	}
}

Ebenfalls aus dem Internet habe ich die CommandLine Klasse:
Code:
package business;

import java.io.*;

public class CommandLine {
	public static void exec(String cmd) throws Exception {
		Runtime rt = Runtime.getRuntime();
		Process proc = rt.exec(cmd.toString());
		StreamGobbler errorGobbler = new StreamGobbler(proc.getErrorStream(),
				"ERROR");
		StreamGobbler outputGobbler = new StreamGobbler(proc.getInputStream(),
				"OUTPUT");
		errorGobbler.start();
		outputGobbler.start();
	}

	public static void exec(String cmd, OutputStream output) throws Exception {
		Runtime rt = Runtime.getRuntime();
		Process proc = rt.exec(cmd.toString());
		StreamGobbler errorGobbler = new StreamGobbler(proc.getErrorStream(),
				"ERROR", output);
		StreamGobbler outputGobbler = new StreamGobbler(proc.getInputStream(),
				"OUTPUT", output);
		errorGobbler.start();
		outputGobbler.start();
	}
}

Und noch meine eigene Klasse welche ausgeführt wird wenn der Connect Button gedrückt wurde:
Code:
public void printerConnect(String name, boolean standard){
		CommandLine cmd = new CommandLine();
		String command;
		command = "rundll32 printui.dll,PrintUIEntry /in /n \\\\printserver\\name 2>nul";
		System.out.println(command);
		try{
			cmd.exec(command);
		}
		catch(Exception e){
			
		}
Die Meldung "Can't connect to the printer" erscheint weiterhin...

Ja ich gebe zu, dass diese Klassen nicht ganz meinem Java Wissen entsprechen und ich nicht alles verstehe. Was mir etwas merkwürdig erscheint ist folgendes: Ich stelle mir die Gobbler Prozesse so vor, dass wenn sie gestartet wurden die Meldungen "schlucken". Doch wird hier der Dos Befehl zuerst abgesetzt und erst dann werden die Gobbler Prozesse gestartet. Ebenfalls scheint es mir etwas unschön, dass die Gobbler Prozesse nicht mehr gestoppt werden.

Wäre schön, wenn mir jemand einen Tip geben könnte.

Gruss
raumgleita
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben