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
GUI-Hauptframe (am Ende ist eigentlich der wichtige Teil)
vNr - Klasse
runStop - Klasse
Thread One ( t0 -t2 schauen alle gleich aus)
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
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