2016-09-19 2 views
-2

Ich versuche zu verstehen, warum dieses Programm nicht funktioniert. Ich benutze den actionlistener richtig, warum zeigt es nicht die verstrichene Zeit seit der Thread läuft, aber der Thread läuft nicht und ich sehe nichts auf dem Bildschirm. Was mache ich falsch oder dies ist die falsche Art der Verwendung der ActionListener Klasse oder ich benutze es nicht richtig, hier ist der Code für alle Dateien.bin ich mit actionlistener richtig

import java.awt.event.*; 
import java.util.TooManyListenersException; 

public class Timer extends Thread { 
    private int iTime = 0; 
    private ActionListener itsListener = null; 

    public Timer() { 
     super(); // allocates a new thread object 
     iTime = 0; // on creation of this object set the time to zero 
     itsListener = null; // on creation of this object set the actionlistener 
          // object to null reference 
    } 

    public synchronized void resetTime() { 
     iTime = 0; 
    } 

    public void addActionListener(ActionListener event) throws TooManyListenersException { 
     if (event == null) 
      itsListener = event; 
     else 
      throw new TooManyListenersException(); 
    } 

    public void removeActionListener(ActionListener event) { 
     if (itsListener == event) 
      itsListener = null; 
    } 

    public void run() { 

     while (true) { 
      try { 
       this.sleep(100); 
      } 
      catch (InterruptedException exception) { 
       // do nothing 
      } 
      iTime++; 

      if (itsListener != null) { 
       String timeString = new String(new Integer(iTime).toString()); 

       ActionEvent theEvent = new ActionEvent(this, 
         ActionEvent.ACTION_PERFORMED, timeString); 

       itsListener.actionPerformed(theEvent); 
      } 
     } 
    } 
} 

nächste Datei

import java.awt.event.*; 
import java.util.TooManyListenersException; 

public class TextTimeDemonStration extends Object implements ActionListener { 
    private Timer aTimer = null; // null reference for this object 

    public TextTimeDemonStration() { 
     super(); 

     aTimer = new Timer(); 

     try { 
      aTimer.addActionListener(this); 
     } 
     catch (TooManyListenersException exception) { 
      // do nothing 
     } 

     aTimer.start(); 
    } 

    public void actionPerformed(ActionEvent e) { 
     String theCommand = e.getActionCommand(); 

     int timeElapsed = Integer.parseInt(theCommand, 10); 

     if (timeElapsed < 10) { 
      System.out.println(timeElapsed); 
     } 
     else 
      System.exit(0); 
    } 
} 

die letzte Datei die Hauptklasse, das Programm von

public class MainTest { 
    public static void main(String[] args) { 
     TextTimeDemonStration test = new TextTimeDemonStration();  
    }  
} 

Antwort

0

In TextTimeDemonStration Klasse läuft, Sie aTimer.addActionListener(this); genannt eine Aktion Hörer

Aber zuweisen in Ihrer Timer.addActionListener() Methode, in der if else Block, schrieb Sie

if (event == null) 
    itsListener = event; 
else 
    throw new TooManyListenersException(); 

Da this nicht null ist, wird es TooManyListenersException Ausnahme auslösen, die gefangen werden.

Danach starten Sie den Timer. Aber da itsListener nach der Initialisierung Null ist, wird der -Block in Ihrer if-Block nie ausgeführt werden. Daher wird nichts getan.

Fix die Logik bei Timer.addActionListener() Methode und es sollte gut funktionieren.

Hoffe, das hilft.

+0

ich bin nicht sicher, was du meinst, wie gehe ich über die Reparatur es im neuen Java jetzt gerade und ich verstehe nicht, was du meinst könnten Sie zeigen mir einige Code – user2245494

+0

ok ich reparierte es danke – user2245494

Verwandte Themen