Ich hab noch nicht so viel Java erfahrung hab erst vor paar wochen angefangen mich damit zu beschäftigen
ich hab mich nun mal nachdem ich den Programmcode immer in Herachien ablaufen lassen hab mal an Threads gewagt...
ich will einen Thread machen der dauerhaft neben dem GUI im hintergrund läuft und mir eine variable durch System.out.println alle 0,5s ausgibt
wenn ich beim GUI einen Button klicke soll sich diese Variable in eine zahl zwischen 1 und 50 ändern
nur gibt mir der Thread die ganze zeit aus dass I1 = 0 ist obwohl ich es ja durch den setter ändere
und bei "I1 wurde auf ... geändert" gibt es mir auch das richtige aus
woran liegt das?
kann ich einen Thread keine aktuellen variablen abfragen lassen?
hier mein Code:
JavaTestApp.java
GUI.java
ThreadTest.java
ich hab mich nun mal nachdem ich den Programmcode immer in Herachien ablaufen lassen hab mal an Threads gewagt...
ich will einen Thread machen der dauerhaft neben dem GUI im hintergrund läuft und mir eine variable durch System.out.println alle 0,5s ausgibt
wenn ich beim GUI einen Button klicke soll sich diese Variable in eine zahl zwischen 1 und 50 ändern
nur gibt mir der Thread die ganze zeit aus dass I1 = 0 ist obwohl ich es ja durch den setter ändere
und bei "I1 wurde auf ... geändert" gibt es mir auch das richtige aus
woran liegt das?
kann ich einen Thread keine aktuellen variablen abfragen lassen?
hier mein Code:
JavaTestApp.java
Java:
package javatestapp;
public class JavaTestApp {
public static void main(String[] args) {
new GUI().setVisible(true);
ThreadTest tt = new ThreadTest();
Thread t1 = new Thread(tt);
t1.start();
}
}
GUI.java
Java:
package javatestapp;
public class GUI extends javax.swing.JFrame {
private ThreadTest TT = new ThreadTest();
/**
* Creates new form GUI
*/
public GUI() {
initComponents();
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jButton1 = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jButton1.setText("Zufall");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, 73, Short.MAX_VALUE)
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jButton1)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
TT.setI1((int) (Math.random()*50));
System.out.println("I1 auf " + TT.getI1() + " geändert");
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/*
* Set the Nimbus look and feel
*/
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/*
* If Nimbus (introduced in Java SE 6) is not available, stay with the
* default look and feel. For details see
* [url=http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html]How to Set the Look and Feel (The Java™ Tutorials > Creating a GUI With JFC/Swing > Modifying the Look and Feel)[/url]
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(GUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(GUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(GUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(GUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
/*
* Create and display the form
*/
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new GUI().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
// End of variables declaration
}
ThreadTest.java
Java:
package javatestapp;
public class ThreadTest implements Runnable
{
private int I1 = 0;
public void run()
{
while (true)
{
System.out.println("I1 = " + getI1());
try
{
Thread.sleep(500);
}
catch (Exception e) {System.out.println(e);}
}
}
public int getI1()
{
return I1;
}
public void setI1(int I1)
{
this.I1 = I1;
}
}