Audio Player Progress Slider nicht flüssig

duckstance

Mitglied
Hallo
Wir müssen einen Audio Player programmieren der einen progress slider haben soll, der auch zum Spulen bewegt werden soll. Das funktioniert auch schon, nur verhält er sich irgendwie komisch. Wenn man spult und gleich loslässt springt er ziemlich willkürlich rum. Man muss ihn ziehen, dann kurz auf der ziel Stelle stehen lassen und dann erst loslassen damit es richtig geht. Weiß vielleicht wer woran das liegen könnte?
Wäre super

Hier die 2 klassen dazu:
Java:
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import javax.media.*;
import javax.media.Player;
import java.io.*;
import java.net.*;
import java.awt.FlowLayout;
import java.awt.event.ActionListener;
import javax.swing.JPanel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.beans.*;
import java.util.*;
import java.util.Timer;
@SuppressWarnings("restriction")

public class ProgressSlider extends JSlider implements ChangeListener, ActionListener{

protected Player player = null;

public void stateChanged(ChangeEvent e){
}

public void actionPerformed(ActionEvent e){
}
         
public ProgressSlider(Player playerinit){
	
	this.setValue(0);
	this.addChangeListener(this);
	this.setSnapToTicks(false);
	this.setPaintTicks(true);
	this.setMajorTickSpacing(10);
	
	player=playerinit;
	
	setBackground(Color.orange);
	
	}
};

Java:
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import javax.media.*;
import javax.media.Player;
import java.io.*;
import java.net.*;
import java.awt.FlowLayout;
import java.awt.event.ActionListener;
import javax.swing.JPanel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.beans.*;
import java.util.*;
import java.util.Timer;

@SuppressWarnings("restriction")

public class TimeControll extends Thread{
	
private ProgressSlider pSlider;
private JLabel showTime;	
protected Player player = null;

public TimeControll(ProgressSlider pSliderinit, Player playerinit2, JLabel showTime, JLabel showTitle){
	this.pSlider = pSliderinit;	 
	this.player = playerinit2;
	this.showTime = showTime;	
}

public void run(){
	double temp = 0;
	double min = 0;
	double sec = 0;
	
		while(true ){	
			try {	
				
				if( ! pSlider.getValueIsAdjusting()){	
					pSlider.setValue(((int) (100*(player.getMediaTime().getSeconds())/(player.getDuration().getSeconds()))));
				}
	
				if( pSlider.getValueIsAdjusting()){
					temp=pSlider.getValue();
					temp=((temp/100)*(player.getDuration().getSeconds()));
					player.setMediaTime(new Time((temp)));
				}
				
				sec = player.getMediaTime().getSeconds() % 60;
				min = (player.getMediaTime().getSeconds() - sec)/60;
				if(min < 10){
					if(sec < 10){
						showTime.setText("0"+Double.toString(min).substring(0,1)+":0"+Double.toString(sec).substring(0,1));
					}
					else{
						showTime.setText("0"+Double.toString(min).substring(0,1)+":"+Double.toString(sec).substring(0,2));
					}
				}
				else
					if(sec < 10){
						showTime.setText(Double.toString(min).substring(0,2)+":0"+Double.toString(sec).substring(0,1));
					}
					else{
						showTime.setText(Double.toString(min).substring(0,2)+":"+Double.toString(sec).substring(0,2));
					}		
				
				sleep(200);				
			} 
			catch (InterruptedException e) {
				e.printStackTrace();
			} 
		}
	}
};
 

Marco13

Top Contributor
Was auffällt ist, dass dort eine Swing-Component von "irgendeinem" Thread verändert wird. Eigentlich dürfen Swing-Components nur vom EDT verändert werden. Zu erreichen mit
Code:
final int value = ... 
SwingUtilities.invokeLater(new Runnable()
{
    public void run()
    {
        slider.setValue(value);
    }
});
Ob das das Problem löst (oder das überhaupt damit zusammenhängt) kann man kaum sagen...
 

duckstance

Mitglied
hm also quasi so?:

Java:
final int value = ((int)(100*(player.getMediaTime().getSeconds())/(player.getDuration().getSeconds())));
SwingUtilities.invokeLater(new Runnable()
{
        public void run()
        {
                 pSlider.setValue(value);
        }
});

bringt so nichts..noch das gleiche problem.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
X Audio Player: Fenster mit Play/Stop-Button erstellen, mit JSlider Lautstärke ändern AWT, Swing, JavaFX & SWT 6
J Ich kriege eine Fehler Messesage bei meinem Media Player AWT, Swing, JavaFX & SWT 8
M JavaFX Wie füge ich zu einer WebEngine einen Flash Player hinzu AWT, Swing, JavaFX & SWT 3
B VLC Player in JavaFX öffnen AWT, Swing, JavaFX & SWT 7
B Play Button auch als Stop Button benutzen, MP3 Player AWT, Swing, JavaFX & SWT 7
R einfacher mp3 player AWT, Swing, JavaFX & SWT 18
multiholle Oberfläche MP3-Player AWT, Swing, JavaFX & SWT 2
G JMF-Player AWT, Swing, JavaFX & SWT 4
D JSlider und JMF player verbinden AWT, Swing, JavaFX & SWT 6
D JMF Player probleme AWT, Swing, JavaFX & SWT 2
T Programm gleich wie Windows Media Player in den Task geben AWT, Swing, JavaFX & SWT 10
S Nochmal GUI mit JMF Player AWT, Swing, JavaFX & SWT 13
S JMF Player Problem AWT, Swing, JavaFX & SWT 3
J Java-Player AWT, Swing, JavaFX & SWT 16
G Probleme mit MP3-Player AWT, Swing, JavaFX & SWT 4
izoards Progress Indication AWT, Swing, JavaFX & SWT 1
N JDialog als Progress-Anzeige AWT, Swing, JavaFX & SWT 6
B SWT Progress-MessageBox AWT, Swing, JavaFX & SWT 2
E Progress Bar mit Bild als Hintergrund AWT, Swing, JavaFX & SWT 2
F splash screen mit progress bar - probleme mit invoke later AWT, Swing, JavaFX & SWT 7
A Progress Bar startet zu "spät" AWT, Swing, JavaFX & SWT 7
S Progress Monitor mit einer Methode() verbinden AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen


Oben