2017-10-28 6 views
0

Ich habe eine FXML Schnittstelle + Java-Programm, in dem ich Folgendes zu erreichen bin versucht:Input der Telnet-Konsole zu FXML TextArea-

  1. A-Taste auf der FXML Schnittstelle angeklickt wird.
  2. Das Programm initiiert ein Telnet zu einem Server.
  3. Das Programm meldet sich am Server an.
  4. Das Programm führt einen Befehl auf dem Server aus.
  5. Das Programm trennt die Verbindung zum Server. Die Eingabe + Ausgabe der gesamten Telnet-Sitzung sollte an eine TextArea auf der FXML-Schnittstelle gestreamt werden.

Das Telnet-Methode funktioniert, und ich kann mit an der Konsole die Eingangs- und Ausgangsstrom:

public class TelnetApplication 
    TelnetClient tl = new TelnetCient(); 
    InputStream is; 
    PrintStream ps; 
    String Prompt = "$ " 

    public TelnetApplicaton(String server, String user, String Password, String command) { 
     try { 
      tl.connect(server, 23); 
      is = tl.getInputStream(); 
      os = new PrintStream(tl.getOutputStream()); 
      readUntil("Login: "); 
      inputText(user); 
      readUntil("Password: "); 
      inputText(password); 
      readUntil(prompt); 
      inputText(command); 
      readUntil(prompt); 
      tl.disconnect(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
    } 
    public String readUntil(String p) { 
     try { 
      char lastChar = p.charAt(p.length() - 1); 
      StringBuffer sb = new StringBuffer(); 
      boolean found = false; 
      char ch = (char is.read(); 
      while (true) { 
       System.out.print(ch); 
       sb.append(ch); 
       if (ch == lastChar) { 
        if (sb.toString().endsWith(p)) { 
         return sb.toString(); 
        } 
       } 
       ch = (char) is.read(); 
      } 
     } catch Exception e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    public void inputText(String s) { 
     try { 
      os.println(s); 
      os.flush(); 
      System.out.println(s); 
     } catch (Exception e) { 
      e.printStackTrace(); 
    } 
} 

Die FXM-Controller sieht wie folgt aus:

public class FXMLController { 
    @FXML TextArea actionConsole; 

    @FXML protected void handleButtonClick(ActionEvent event) { 

     TelnetApplication tl = new TelnetApplication("192.168.0.1", "user", "password", "df -h"); 
    } 
} 

Also meine Frage ist , wie kann ich einen Wert der Stream-Eingabe und Ausgabe machen, die in der TextArea actionConsole der FXML-Schnittstelle angezeigt werden kann? Ich habe schon viele Dinge ausprobiert, aber keiner sieht, dass es funktioniert. Ich muss zugeben, mein Mangel an Erfahrung in der Programmierung ist wahrscheinlich die Ursache für mein Problem. Vielen Dank im Voraus.

Antwort