InputStream direkt in einem EditorPane ausgeben lassen?



  • Hi,
    kennt jemand eine einfache Möglichkeit wie man einen InputStream, zB. aus einem Socket, oder einem File direkt auf einem EditorPane darstellen lassen kann?

    Es gibt da ein editor.read(inputStream, dev) aber da weiss ich nicht genau wie ich das nutzen soll.
    übergebe ich dem read meinen InputStream, bleibt das Programm bei dem read(...)stehen.

    Oder gibt es sowas wie editor.addText("meintext");??
    Klar kann man getText() und setText() machen, aber gibts da nichts besseres?

    mein eigentliches Ziel ist: Ich möchte so eine Art Console in meinem Programm machen.

    hier mal ein kleiner Entwurf meines Problems wobei das EditorPane die Anwendung anhält:

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.net.*;
    import java.io.*;
    
    public class Console extends JFrame{
        private JPanel top = new JPanel(new FlowLayout());
        private JPanel bottom = new JPanel(new FlowLayout());
        private JButton pingButton = new JButton("Ping Host");
        private JButton knopf2 = new JButton("Knopf2");
        private JTextField host = new JTextField("192.168.0.1");
        private JLabel label = new JLabel("Host zum anpingen:");
        private JLabel status = new JLabel("Status: Programm gestartet");
        private JEditorPane edit = new JEditorPane();
    
        public Console() {
            //hinzufügen zum contentPane
            this.getContentPane().setLayout( new BorderLayout() );
            this.getContentPane().add(top, BorderLayout.NORTH);
            this.getContentPane().add(bottom, BorderLayout.SOUTH);
            this.getContentPane().add(edit, BorderLayout.CENTER);
    
            //Hinzufügen der Komponenten zum top-Panel
            top.add(label);
            top.add(host);
            top.add(status);
            //Hinzufügen der Komponenten zum bottom-Panel
            bottom.add(pingButton);
            bottom.add(knopf2);
    
            //ActionListener hinzufügen
            pingButton.addActionListener(new ActionListener(){
                private InputStream in;
    
                public void actionPerformed(ActionEvent event){
                    try {
                        //Connection herstellen
                        Socket x = new Socket();
                        x.connect( new InetSocketAddress( host.getText(), 7 ), 500 );
    
                        //Zum Host etwas schicken
                        x.getOutputStream().write(0xff);
                        x.getOutputStream().write(0xff);
                        x.getOutputStream().write(0xff);
                        x.getOutputStream().write(0xff);
    
                        //vom Host empfangen
                        in = x.getInputStream();
                        status.setText ( "Status: 1. Return-Wert: "+ in.read() );
                        System.out.println( "Status: 1. Return-Wert: "+ in.read() );
                        edit.read(in , "test");
                    }
                    catch (IOException e) { 
                        status.setText( "Fehler: " + e.getMessage() ); 
                        System.out.println( "Fehler: " + e.getMessage() ); 
                        host.requestFocus();
                    }
                }
            });
    
            //aber hier wird das JFrame konfiguriert und angezeigt      
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            edit.setPreferredSize( new Dimension(300,300) );
            this.pack();
            this.setVisible(true);
        }
    
        public static void main(String[] args) {
            new Console();
            System.out.println("programm gestartet....");
        }
    }
    


  • also ich mach das erstmal mit

    String temp = edit.getText();
    edit.setText(temp + data);

    aber warum bleibt die gesamte Anwendung bei der Zeile:
    edit.read(in , "test");
    im letztem geposteten code immer stehen?
    Muss man den InputStream erst schliessen, oder wartet das read auf ein bestimmtes Zeichen, oder...???


Anmelden zum Antworten