Hallo,
ich programmiere eigentlich seit geraumer Zeit in Java, komme aber schlichtweg nicht mit diesem Problem voran:
Ich habe ein jLabel, das einen normalen Rahmen besitzt. Klickt ein Benutzer nun auf einen Button, soll ZUERST der Rahmen eine grüne Farbe bekommen, und DANACH ein mp3-File (ca. 1,3sec) mittels jLayer abgespielt werden. Nachdem das Soundfile abgespielt wurde soll der Rahmen wieder auf seinen Standartwert zurückgesetzt werden.
Das Problem ist, dass zuerst der Sound abgespielt wird, und scheinbar erst danach der Rahmen seine Farbe bekommt. Da dieser aber beim Abruf einer Funktion wieder zurückgesetzt wird, ist nichts von dem Ereignis sichtbar.
Was ich nun will ist, dass zuerst der Rahmen seine Farbe bekommt, dann das mp3-File abgespielt wird (dh. soll der grüne Rahmen während des Abspielens sichtbar sein) und danach alles auf die Standartwerte zurückgesetzt wird. Die relevanten Codeabschnitte habe ich angehängt - was für eine triviale Sache mache ich falsch? Danke für evtl. Hilfestellungen!
ich programmiere eigentlich seit geraumer Zeit in Java, komme aber schlichtweg nicht mit diesem Problem voran:
Ich habe ein jLabel, das einen normalen Rahmen besitzt. Klickt ein Benutzer nun auf einen Button, soll ZUERST der Rahmen eine grüne Farbe bekommen, und DANACH ein mp3-File (ca. 1,3sec) mittels jLayer abgespielt werden. Nachdem das Soundfile abgespielt wurde soll der Rahmen wieder auf seinen Standartwert zurückgesetzt werden.
Das Problem ist, dass zuerst der Sound abgespielt wird, und scheinbar erst danach der Rahmen seine Farbe bekommt. Da dieser aber beim Abruf einer Funktion wieder zurückgesetzt wird, ist nichts von dem Ereignis sichtbar.
Was ich nun will ist, dass zuerst der Rahmen seine Farbe bekommt, dann das mp3-File abgespielt wird (dh. soll der grüne Rahmen während des Abspielens sichtbar sein) und danach alles auf die Standartwerte zurückgesetzt wird. Die relevanten Codeabschnitte habe ich angehängt - was für eine triviale Sache mache ich falsch? Danke für evtl. Hilfestellungen!
Java:
// Nur die notwendigsten Codeabschnitte
private javax.swing.border.Border border = javax.swing.BorderFactory.createEtchedBorder(javax.swing.border.EtchedBorder.RAISED);
public void loadNext() {
jLabel1.setBorder(this.border);
}
public void playCorrSound() {
// Hier der jLayer-code für das Abspielen der Sounddate
// kein Thread verwendet
}
public void jButton1MouseClicked(java.awt.event.MouseEvent e) {
jLabel1.setBorder(new LineBorder(Color.GREEN,2));
playCorrSound();
loadNext();
}