• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

Components im Frame ändern

Payno4

Schafhirte
Registriert
12 Februar 2015
Beiträge
127
Diamanten
300
Hallo liebe Community ich bins mal wieder,
ich habe eine Problem mit dem ändern von Components während Threads ablaufen. Im meinem konkreten Fall ist es ein JLabel das sich nicht ändern lässt oder besser gesagt sobald ich Threads abspiele passiert in dem Frame garnichts mehr.
Ich habe versucht den Text des JLabels zu ändern , ging nicht , danach habe ich versuch ein neues zu erzeugen und das alte zu löschen, ging auch nicht.
Aber nun zu meiner Frage :
Warum kann ich wenn ich Threads abspiele den Frame nicht mehr bearbeiten ?

Main
Code:
package A1.Main;



import A1.Threads.runStop;



@SuppressWarnings("unused")

public class main {

   

    public static boolean b;



    public static void main(String[] args) {

        b = true;

        A1.GUI.A.main(null);

        if(b == true) {

            A1.GUI.debug.main(null);

        }
    }

}

GUI-Hauptframe (am Ende ist eigentlich der wichtige Teil)
Code:
package A1.GUI;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPasswordField;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class A extends JFrame{

    public static JFrame frame;
    private JPasswordField passwordField;
    public static JLabel lblNewLabel;

    /**
    * Launch the application.
    */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    A window = new A();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
    * Create the application.
    */
    public A() {
        initialize();
    }

    /**
    * Initialize the contents of the frame.
    */
    private void initialize() {
        frame = new JFrame();
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
            }
        });
        frame.setBounds(100, 100, 450, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       
        lblNewLabel = new JLabel("New label");
        frame.getContentPane().add(lblNewLabel, BorderLayout.CENTER);
       
        passwordField = new JPasswordField();
        frame.getContentPane().add(passwordField, BorderLayout.SOUTH);
     
// Hier ist der eigentliche wichtige Teil 
  
        JButton btnNewButton = new JButton("New button");
        btnNewButton.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                vNr vnr = new vNr(lblNewLabel);
            }
        });
        frame.getContentPane().add(btnNewButton, BorderLayout.EAST);
    }

}

vNr - Klasse
Code:
package A1.GUI;

import javax.swing.JLabel;

import A1.Threads.runStop;

public class vNr {
   
    private runStop rn;
   
    public vNr(JLabel l) {
       
        rn = new A1.Threads.runStop();
       
        rn.runT();
       
        while(rn.isContinue()) {
            System.out.println("Test");
            JLabel jl = new JLabel();
            jl.setBounds(l.getBounds());
            jl.setText(rn.getNrs());
            A.frame.add(jl);
            A.frame.remove(l);
           
           
        }
        l.setText("Test");
       
    }
   
    public void stopvNr() {
        //DEBUG selfmade
        if(A1.Main.main.b == true) {
            System.out.println("Threds werden gestoppt (stopvNr)");
        }
        //ENDE
       
        rn.stopT();
    }
}

runStop - Klasse
Code:
package A1.Threads;



import javax.swing.JTextPane;



publicclassrunStop {

   

    public static boolean b;

    //i ist hier die Zeit für Thread.sleep(m) methoden in nrOne - Klasse
    public static int i;

   

    private Thread 0; 

    private Thread 1; 

    private Thread 2; 

   

    public runStop() {

       

        b = false;

        i = 100;

       

        t1 = new Thread(new nrTwo());

        t0 = new Thread(new nrOne());

        t2 = new Thread(new nrThree());

       

        t0.setName("1");

        t1.setName("2");

        t2.setName("3");

       

    }

   

    public void stopT() {

        if(isContinue() == true) {

            b = true;

           

            try {

                Thread.sleep(i + 10);

            } catch (Exception e) {

                // TODO: handle exception

            }

           

            if(A1.Main.main.b == true) {

               

            }

            t0.interrupt();

            t1.interrupt();

            t2.interrupt();

        }

        else if(A1.Main.main.b == true) {

            A1.GUI.debugInc.textOutput("Keine Threads mehr am Laufen");

        }

    }

   

    public void runT() {

        t0.start();

        t1.start();

        t2.start();

    }

   

    public String getNrs() {

        return"NR:  " + nrOne.i + nrTwo.i + nrThree.i;

    }

   

    public Boolean isContinue() {

        if(t0.isAlive() && t1.isAlive() && t2.isAlive()) {

            return true;

        }

        else {

            return false;

        }

       

    }

}

Thread One ( t0 -t2 schauen alle gleich aus)
Code:
package A1.Threads;



import javax.swing.JTextPane;



public class runStop {

   

    public static boolean b;

    public static int i;

   

    private Thread 0; 

    private Thread 1; 

    private Thread 2; 

   

    public runStop() {

       

        b = false;

        i = 100;

       

        t1 = new Thread(new nrTwo());

        t0 = new Thread(new nrOne());

        t2 = newThread(newnrThree());

       

        t0.setName("1");

        t1.setName("2");

        t2.setName("3");

       

    }

   

    public void stopT() {

        if(isContinue() == true) {

            b = true;

           

            try {

                Thread.sleep(i + 10);

            } catch (Exception e) {

                // TODO: handle exception

            }

           

            if(A1.Main.main.b == true) {

               

            }

            t0.interrupt();

            t1.interrupt();

            t2.interrupt();

        }

        else if(A1.Main.main.b == true) {

            A1.GUI.debugInc.textOutput("Keine Threads mehr am Laufen");

        }

    }

   

    public void runT() {

        t0.start();

        t1.start();

        t2.start();

    }

   

    public String getNrs() {

        return"NR:  " + nrOne.i + nrTwo.i + nrThree.i;

    }

   

    public Boolean isContinue() {

        if(t0.isAlive() && t1.isAlive() && t2.isAlive()) {

            return true;

        }

        else {

            return false;

        }

       

    }

}

Ich möchte jetzt schon mal ein fettes Dankeschön an jene aussprechen , die sich die Mühe machen das alles durch zu lesen und mir bei meinem Problem zu helfen. Falls es Verständnisprobleme geben sollte einfach nachfragen.

Mit freundlichen Grüßen
payno4 :)
 
F

Figz

Guest
Hast du dir das Kapitel zu den Threads durchgelesen?

Ich muss gestehen, ich habe lange keine Front-End mehr mit Java erstellt.

Trotzdem würde ich dir raten die GUI mit javaFX zu erstellen.
Dort hast du dann auch die Möglichkeit die Daten zu Binden (Was heutzutage der Standardweg ist??).

Code:
[LIST]
[*]        while(rn.isContinue()) {
[/LIST]
[LIST]
[*]            System.out.println("Test");
[/LIST]
[LIST]
[*]            JLabel jl = new JLabel();
[/LIST]
[LIST]
[*]            jl.setBounds(l.getBounds());
[/LIST]
[LIST]
[*]            jl.setText(rn.getNrs());
[/LIST]
[LIST]
[*]            A.frame.add(jl);
[/LIST]
[LIST]
[*]            A.frame.remove(l);
[/LIST]
[LIST]
[*]          
[/LIST]
[LIST]
[*]          
[/LIST]
        }

Solange du in einer while-Schleife deine GUI veränderst, wirst du erst am Ende die letzte Änderung sehen.
 
Oben