CodeForum.chCode ForenJavaThema: Klasse Process
Seiten: [1]
AntwortenDrucken
Autor Thema: Klasse Process  (Gelesen 996 mal)
renato robbiani
Mitglied
*
Offline Offline

Beiträge: 81


« am: 16. Dezember 2008, 13:14:11 »
ZitierenZitat

Hallo zusammen

Ich drehe mich im Kreis. Ich komme nicht mehr weiter. Ich bin auf eure Hilfe angewiesen. Ich möchte aus einem Java Programm heraus ein Programmstarten. Das geht ja auch ohne Probleme. Nur verlant das Programm an einer bestimmten Stelle die eingabe des Passwortes. Genau dort ist das Problem. Aus dem Inputstream wird eine Zeitlang gelesen und vor der Aufforderung das Passwort einzugeben steht das ganze still. Ich weiss nicht mehr was ich noch machen kann.

Code:
    public static void main(String[] args) {
        // TODO code application logic here
        if(args.length > 1) {
            String dat_name = args[0];//Dateiname der Konfiguration
            String pwd = args[1];
            String start, parameter;//Aufrufparameter für RDA

            try {
                InputStream  dataInput =
                    new BufferedInputStream(new FileInputStream(dat_name));

                Scanner befehl = new Scanner(dataInput);
               
                while(befehl.hasNext()){
                    start = befehl.nextLine();
                    parameter = befehl.nextLine();
                    System.out.println("Startet > " + start);
                    Process prozess = new ProcessBuilder( "perl.exe", start, parameter ).start();

                    Scanner lesen = new Scanner(prozess.getInputStream());
                    String text;
                     while(lesen.hasNextLine()) {//
                           if(lesen.hasNextLine()){//*** Hier bleibt das ganze stehen Warum ******
                            text = lesen.nextLine();
                            System.out.println(text);
                        }else {
                            byte pass[];
                            pass = pwd.getBytes();
                            System.out.println("Eingabe < " + pass);
                            prozess.getOutputStream().write(pass);
                        }
                    }

                    Scanner fehler = new Scanner(prozess.getErrorStream());
                    while(fehler.hasNext()) {
                        System.out.println(fehler.nextLine());
                    }
                }

                dataInput.close();//Datei wieder schliessen
            }catch(Exception e) {
                e.printStackTrace();
                System.out.println("Datei kann nicht geöffnet werden");
            }
        }else {
            System.out.println("ERR Fehlende oder falsche Startparameter.");
            System.out.println("Programm wird wie folgt gestartet");
            System.out.println(">java start_rda konfigurationsdatei passwort für SYSTEM");
        }
    }
Hat jemand ein Beispiel wo so was änliches gemacht wird. Oder weiss jemand wo es so ein Beispiel hat.

Gruss Renato
Moderator informieren   Gespeichert
SuperMario
Globaler Moderator
*
Offline Offline

Beiträge: 2497



« Antworten #1 am: 16. Dezember 2008, 13:23:05 »
ZitierenZitat

Vielleicht hilft dir das hier weiter:
http://java.sun.com/developer/technicalArticles/Security/pwordmask/
http://www.rgagnon.com/javadetails/java-0375.html
Moderator informieren   Gespeichert
renato robbiani
Mitglied
*
Offline Offline

Beiträge: 81


« Antworten #2 am: 16. Dezember 2008, 15:49:09 »
ZitierenZitat

Ciao SuperMario

Herzlichen Dank für die rasche Hilfe. Aber es ist nicht genau das was ich suche. Es ist so. Ich rufe aus einem Java programm ein Programm auf welches eine eingabe erwartet. In diesem Fall handeld es sich um das Passwort. Aber es muss nicht zwingend ein Passwort sein. Sondern es get darum ein Programm auf zu rufen und eine Eingabe ins Programm vorzunehmen. Genau an dem scheitere ich.

Gruss Renato
Moderator informieren   Gespeichert
SuperMario
Globaler Moderator
*
Offline Offline

Beiträge: 2497



« Antworten #3 am: 16. Dezember 2008, 16:36:28 »
ZitierenZitat

Aha. D.h. du möchtest die Eingaben für dieses Programm, das du aus Java aufrufst, automatisieren bzw. simulieren.

Ich denke sowas kannst du mit der Klasse "java.awt.Robot" machen. Damit kann man Tastenanschläge simulieren, z.b. die Tasten "A" "B" "C" drücken und dann ein "ENTER/RETURN" drücken.
http://java.sun.com/j2se/1.5.0/docs/api/java/awt/Robot.html

Schau mal hier ist ein kleines Beispiel:
http://www.javalobby.org/java/forums/t84094.html

Du müsstest halt deinen String in die einzelnen Tasten-Codes aufsplitten und am Ende ein "KeyEvent.VK_ENTER" schicken. Da schreibst du einfach eine for-schleife, die die Buchstaben durchgeht und mit einem großen switch-case die Buchstaben auf die entsprechenden Tasten-Code mappt.

Du mußt natürlich aufpassen mit Gross/Kleinschreibung. Weil wenn du auf die Taste "A" drückst kommt natürich ein "a" an, d.h. du musst vorher ein VK_SHIFT drücken.

Hier habe ich einen Code gefunden, der einen String aus Buchstaben und Zahlen entgegen nimmt und ihn in die einzelnen richtige Tastendrücke verwandelt:
http://www.sitepoint.com/forums/showthread.php?t=547370
Code:
    String string = "Hello World123";
    try {
      Robot robot = new Robot();
      char[] shift = string.toCharArray();
      char[] array = string.toUpperCase().toCharArray();
      for( int i = 0; i < array.length; ++i ) {
        if( Character.isUpperCase( shift[i] ) ) {
          robot.keyPress( KeyEvent.VK_SHIFT );
        }
        robot.keyPress( array[i] );
        if( Character.isUpperCase( shift[i] ) ) {
          robot.keyRelease( KeyEvent.VK_SHIFT );
        }
      }
    } catch ( Exception e ) {
      System.out.println( e );
    }
Moderator informieren   Gespeichert
Seiten: [1]
AntwortenDrucken
CodeForum.chCode ForenJavaThema: Klasse Process
Gehe zu:  

 

Partner Sites

Werbung

TinyPortal v1.0.5 beta 1© Bloc