#1 15. Januar 2010 Timer ohne sleep Tach zusammen! Habe folgendes Problem, werde erstmal die Klassen Posten und dann mein Problem beschreiben. Grafische Oberfläche: PHP: import java . awt . Color ; import java . awt . Component ; import java . awt . Dimension ; import java . awt . event . ActionEvent ; import java . awt . event . ActionListener ; import javax . swing . BoxLayout ; import javax . swing . ImageIcon ; import javax . swing . JButton ; import javax . swing . JFrame ; import javax . swing . JLabel ; import javax . swing . JPanel ; import javax . swing . JTextField ; public class Eingabe extends JFrame implements ActionListener { private static final long serialVersionUID = 1L ; private javax . swing . JButton bild ; private javax . swing . JButton okButton ; private javax . swing . JLabel textFeld ; private javax . swing . JTextField eingabeFeld ; private static int instancecounter = 0 ; Tuxgotchi tuxgotchi = null ; boolean erg = false ; String resultat = "leer" ; private JPanel contentPanel = null ; public Eingabe ( String dateiname , String text , Tuxgotchi tux ) { initComponents (); ladeBild ( dateiname ); textFeld . setText ( text ); tuxgotchi = tux ; setVisible ( true ); positioniereFenster (); } public void setVisible ( boolean status ) { if (( isVisible () && ! status ) || (! isVisible () && status )) super . setVisible ( status ); } public void setzeAusgabetext ( String ausgabeText ) { textFeld . setText ( ausgabeText ); } public String getEingabe () { return eingabeFeld . getText (); } public void clearEingabe () { eingabeFeld . setText ( "" ); } private void initComponents () { setDefaultCloseOperation ( EXIT_ON_CLOSE ); contentPanel = new JPanel (); contentPanel . setLayout (new BoxLayout ( contentPanel , BoxLayout . Y_AXIS )); setContentPane ( contentPanel ); bild = new JButton (); bild . setBackground ( Color . white ); bild . setPreferredSize (new Dimension ( 270 , 270 )); bild . setAlignmentX ( Component . CENTER_ALIGNMENT ); textFeld = new JLabel (); textFeld . setText ( "jLabel1" ); textFeld . setAlignmentX ( Component . CENTER_ALIGNMENT ); eingabeFeld = new JTextField (); eingabeFeld . setAlignmentX ( Component . CENTER_ALIGNMENT ); okButton = new JButton (); okButton . setText ( "OK" ); okButton . setAlignmentX ( Component . CENTER_ALIGNMENT ); okButton . addActionListener ( this ); contentPanel . add ( bild ); contentPanel . add ( textFeld ); contentPanel . add ( eingabeFeld ); contentPanel . add ( okButton ); pack (); } private void ladeBild ( String dateiname ) { String pfadZumBildString = "pics/" + dateiname + ".png" ; java . net . URL url = ClassLoader . getSystemResource ( pfadZumBildString ); bild . setIcon (new ImageIcon ( url )); } private void positioniereFenster () { instancecounter = instancecounter + 1 ; setLocation ((( instancecounter % 5 ) * 220 ) % 1000 , (( instancecounter / 5 ) * 220 ) % 800 ); setTitle ( tuxgotchi . toString ()); } public void actionPerformed ( ActionEvent evt ) { String eingabe = getEingabe (); eingabe = eingabeWortErkennung ( eingabe ); if( erg = false ){ eingabeFeld . setText ( "Ungültige eingabe bitte wiederholen." ); } if( erg = true ){ eingabeFeld . setText ( "Alles Klar! Ich gehe jetzt Essen" ); // tuxgotchi.gibFutter(); } } public String eingabeWortErkennung ( String eingabe ){ String [] fragen = new String [ 5 ]; fragen [ 0 ]= "hungrig" ; fragen [ 1 ]= "kohldampf" ; fragen [ 2 ]= "hunger" ; for( int i = 0 ; i < 3 ; i ++){ //Erkennung des Worts im Text int wortAnfangsIndex = - 1 ; wortAnfangsIndex = eingabe . indexOf ( fragen [ i ]); if ( wortAnfangsIndex != - 1 ){ int wortlaenge = fragen [ i ]. length (); resultat = eingabe . substring ( wortAnfangsIndex , wortAnfangsIndex + wortlaenge ); wortAnfangsIndex = - 1 ; erg = true ; return resultat ; } } int wortAnfangsIndex = - 1 ; wortAnfangsIndex = eingabe . indexOf ( "essen" ); if( wortAnfangsIndex != - 1 ){ resultat = eingabe . substring ( wortAnfangsIndex , wortAnfangsIndex + 5 ); wortAnfangsIndex = - 1 ; erg = true ; return resultat ; } return resultat ; } } Spielsteuerung: PHP: public class Tuxgotchi { // Attribute long zufallszahl1 ; // Zufallszahl für die aufmerksamkeit long zufallszahl2 ; // zufallszahl fürs füttern long futter = 100 ; // Konstruktoren public Tuxgotchi (){ this ( "tux" ); } public Tuxgotchi ( String dateiname ) { //zufallszahl1 = zufallszahl(20,40); // Zufallszahl für die aufmerksamkeit zufallszahl2 = zufallszahl ( 30 , 50 ); // zufallszahl fürs füttern // Ausgabe in der Konsole. System . out . println ( this ); fuetterAnzeige (); zeit (); } // Methoden // Gibt eine Repräsentation der Zeit für den Zeitpunkt "jetzt". Es kann damit in der Einheit Sekunden gerechnet werden. long jetzt () { return System . currentTimeMillis () / 1000 ; } // Erzeugt eine Zufallszahl vom Typ int im gegebenen Bereich. int zufallszahl ( int von , int bis ) { return (int) ( Math . random () * ( bis - von + 1 ) + von ); } // ------------------------------------------------------------------- public void aufmerksamkeitZeigen () { System . out . println ( "Ich bin jetz gut drauf" ); } public void fuettern () { // Muss noch implementiert werden. } // ------------------------------------------------------------------- // Diese Methode legt fest, was z.B. Ausgegeben wird, wenn ein Objekt dieser Klasse in einer // System.out.println(referenzVariableDieserKlasse); // Anweisung in der Konsole ausgegeben werden soll. public String toString () { return getClass (). getSimpleName (); } public void fuetterAnzeige () { long sleepLaenge = zufallszahl2 * 0.1 ; // Es wird berechnet in abhängigkeit von der Zufallszahl, wieviel 10 % der Zeit davon sind. //System.out.println(zufallszahl2); double zw =((double) zufallszahl2 )* 0.1 ; System . out . println ( zw ); long sleepLaenge =( long ) zw ; //System.out.println(sleepLaenge); // Lebenszeit : 30 s while( futter > 0 ){ try{ Thread . sleep ( sleepLaenge ); } catch( InterruptedException m ){ } // Nun sind 10 % der Zeit vergangen futter = futter - 10 ; System . out . println ( "Futteranzeige: " + futter + "%" ); } // Disp : Du bist tot } } + Multi-Zitat Zitieren
#2 16. Januar 2010 AW: Timer ohne sleep iwie fehlt die Beschreibung deines Problems? + Multi-Zitat Zitieren
#3 16. Januar 2010 AW: Timer ohne sleep Code: Timer timer; timer = new Timer(); timer.schedule(new taskTimer(), 1,1000); Code: public class taskTimer extends TimerTask { public void run() { } } + Multi-Zitat Zitieren