Ich hab ein kleines Problem:
Ein Thread (also eine andere Klasse) muss ein Label aus einer anderen Klasse verändern. Und das jede Sekunde. Jetzt muss das jede Sekunde geschehen. Ich hab das folgendermaßen gemacht:
Einen Timer erstellt, der jede Sekunde eigentlich getPlaylength() aufrufen soll (gaaanz unten). Aber dieZeile ist falsch. also wie mach iches, dass die methode in klasse noise aus klasse PlaylengthTimer aufgerufen werden kann? (Der code ist extrem gekürzt, sollte aber das wichtigste enthalten.
Ein Thread (also eine andere Klasse) muss ein Label aus einer anderen Klasse verändern. Und das jede Sekunde. Jetzt muss das jede Sekunde geschehen. Ich hab das folgendermaßen gemacht:
Einen Timer erstellt, der jede Sekunde eigentlich getPlaylength() aufrufen soll (gaaanz unten). Aber dieZeile ist falsch. also wie mach iches, dass die methode in klasse noise aus klasse PlaylengthTimer aufgerufen werden kann? (Der code ist extrem gekürzt, sollte aber das wichtigste enthalten.
Code:
/*
* Noise.java
*
* Created on 4. Juli 2004, 12:39
*/
import java.awt.*;
import java.text.*;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.*;
import javax.media.*; // JMF
public class Noise extends JFrame implements ControllerListener {
/** All used variables */
private Player player;
private Timer timer = new Timer();
// initSetLookAndFeel()
private String LookAndFeel;
// getPlaylength()
private int seconds, minutes;
private Time time, mediaTime;
private DecimalFormat df;
/** Creates new form Noise */
public Noise() {
initComponents();
}
private void initComponents() {
lblPlaylength = new javax.swing.JFormattedTextField();
}
private void bPlayActionPerformed(java.awt.event.ActionEvent evt) {
if(player != null)
player.start();
[b] timer.schedule(new PlaylengthTimer(), 1000, 1000);[/b]
}
/** Exit the Application */
private void exitForm(java.awt.event.WindowEvent evt) {
System.exit(0);
}
/**
* @param args the command line arguments
*/
public static void main(String args[]){
new Noise().show();
}
public void getPlaylength() {
time = player.getDuration();
mediaTime = player.getMediaTime();
seconds = (int)Math.floor(time.getSeconds() - mediaTime.getSeconds()); // Total amount of seconds
minutes = (int)Math.floor((time.getSeconds() / 60)); // Total amount of minutes
seconds = seconds - minutes * 60; // Seconds left
df = new DecimalFormat("00");
lblPlaylength.setText("-" + String.valueOf(df.format(minutes)) + ":" + String.valueOf(df.format(seconds))); // -02:21
}
public void controllerUpdate(ControllerEvent controllerEvent) {
if(controllerEvent instanceof EndOfMediaEvent) {
if(player != null) {
player.stop();
player.setMediaTime(new Time(0));
player.deallocate();
}
}
}
// Variables declaration - do not modify
private javax.swing.JFormattedTextField lblPlaylength;
// End of variables declaration
}
class PlaylengthTimer extends TimerTask
{
public void run()
{
Noise.getPlaylength();
}
}