System.out Ausgabe auf jtextarea Fehlersuche

Bitte aktiviere JavaScript!
Hey Leute, ich habe schon wieder ein Problem was ich nicht vernünftig lösen kann.
Ich will die System.out Ausgabe von der Console in eine Textarea in der Gui umleiten. Das klappt soweit auch so gut über einen erstellten Printstream.
Die System.out Ausgaben kommen aus einer methode die erst aufgerufen werden soll wenn ein bestimmter Button gedrückt wird, was durch den Aktionlistener auch funktioniert.
Aber leider nur beim debuggen, was ich absolut nicht verstehe :/. Der Programmablauf sollte doch beim Debuggen identisch sein?

Hier mal mein Code :

Code:
public class LoadGui
{
    public static Playground testPlayground = new Playground();

    public static void main(String[] args)
    {
         StartScreen startScreen = new StartScreen();
         PrintStream someOtherStream = new PrintStream(System.out)
            {
                public void println(String s)
                {
                    Playground.onEvent(s);
                }
                public void println(int i)
                {
                    Playground.onEvent(i);
                }
            };
            System.setOut(someOtherStream);
            boolean t = true;
            while(t==true)
            {
                if(testPlayground.isVisible())
                {
                    GameLogic.logic();
                    t=false;
                }
            }
    }
Playground.isVisible wird im ActionListener auf true gesetzt.
Gamelogic() ist die methode mit den System.out Ausgaben.

Hier der Code davon :

Code:
    public PlayerNames()
    {
        super("Spielernamen");
        setVisible(true);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        int frameWidth = 300;                                      
        int frameHeight = 300;
        setSize(frameWidth, frameHeight);   
        Dimension d = Toolkit.getDefaultToolkit().getScreenSize();   
        int x = (d.width - getSize().width) / 2;
        int y = (d.height - getSize().height) / 2;
        setLocation(x, y);
        Container cp = getContentPane();                    
        cp.setLayout(null);
        cp.setBackground(Color.WHITE);
        textfield1.setBounds(20, 0, 261, 44);
        textfield1.setText("Hier können Sie die Spielernamen eingeben.");
        cp.add(textfield1);
        textfield2.setBounds(16, 56, 62, 20);
        textfield2.setText("Spieler 1 :");
        cp.add(textfield2);
        jTextField1.setBounds(82, 58, 150, 20);
        cp.add(jTextField1);
        button.setBounds(93, 206, 115, 25);
        button.setText("Spiel starten");
        button.setMargin(new Insets(2, 2, 2, 2));
        button.addActionListener(new ActionListener()
        {
          public void actionPerformed(ActionEvent evt)
          {
            button_ActionPerformed(evt);
          }
        private void button_ActionPerformed(ActionEvent evt)
        {
            LoadGui.setPlayerOneNameString(jTextField1.getText());
            LoadGui.testPlayground.setVisible(true);
            dispose();
        }
        });
        cp.add(button);
Und er macht das auch so wie geplant, aber halt nur beim Debuggen.
Ich hoffe es kann mir jemand einen Tipp geben.
 
Entferne erstmal überall static (außer bei main).
Hab ich schon versucht, aber ich kriege es nicht richtig hin.
Das Problem ist, zb. bei der Variable testPlayground, dass ich diese im actionlistener auf Visible(true) setzten möchte und wenn ich sie nicht static machen kriege ich sie in die andere Klasse nicht übergeben.
Das sollte doch mit getter setter funktionieren, nur leider meckert er da immer rum.
 
toll - und wir dürfen raten, WAS angemeckert wird?? :rolleyes:
VG Klaus
Ja sorry stimmt natürlich.

Code:
    public static void main(String[] args)
    {
         Playground testPlayground = new Playground();
         StartScreen startScreen = new StartScreen();
         PrintStream someOtherStream = new PrintStream(System.out)
            {
                public void println(String s)
                {
                    Playground.onEvent(s);
                }
                public void println(int i)
                {
                    Playground.onEvent(i);
                }
            };
            System.setOut(someOtherStream);
            boolean t = true;
            while(t==true)
            {
                if(testPlayground.isVisible())
                {
                    GameLogic.logic();
                    t = false;
                }
            }
    }
Wenn ich das auf diesem Weg probiere, erkennt er das Object testPlayground natürlich in der anderen Klasse nicht. Wenn ich es static setzte ist es Global und es geht über den Klassenaufruf.
Leider weiß ich nicht wie ich das ohne static umsetzten soll.
 
testPlayground.onEvents(s);
Leider verändert sich nicht viel.
Im Debugger von Eclipse macht er es, er setzt testPlayground.isVisible auf true, geht in die Schleife rein, führt die methode logic() aus und schreibt in die textarea.
Beim normalen ausführen des Programms wird auch auf true gesetzt, aber er führt die methode nicht aus. :/ es passiert einfach nichts in der textarea.
 
Ich hab es gestern noch hinbekommen, es lag glaube tatsächlich wieder an der missbräuchlichen Benutzung von static. Überall entfernt und nun läuft es wie geschmiert. :]
Danke für eure Ratschläge!
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben