当进度条正在运行时阻塞线程
问题描述:
你好,我想让ProgressBar加载,直到歌曲开始... 我有这段代码,但ProgressBar开始时,歌曲开始,它的制作完成约5秒。所以请别人帮我做正确的...谢谢:)当进度条正在运行时阻塞线程
package passwordsaver1;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.net.URL;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.swing.JOptionPane;
public final class Music extends javax.swing.JFrame {
void centreWindow() {
Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
int x = (int) ((dimension.getWidth() - getWidth())/2);
int y = (int) ((dimension.getHeight() - getHeight())/2);
setLocation(x, y);
}
public Music(String mainAccName) {
initComponents();
centreWindow();
setTitle("PasswordSaver - Music");
this.mainAccName = mainAccName;
}
String mainAccName;
private void pitbullActionPerformed(java.awt.event.ActionEvent evt) {
try {
URL url = new URL("http://mini-mk-market.com/music/PitBulll.wav");
Clip clip = AudioSystem.getClip();
AudioInputStream ais;
ais = AudioSystem.getAudioInputStream(url);
clip.open(ais);
clip.loop(5);
clip.start();
new Thread(new Start()).start();
} catch (Exception ex) {
JOptionPane.showMessageDialog(null, "Can't find Internet Connection !");
}
}
// this is just for testing does the song will stop after clicking the new... but cant..
private void afrojackActionPerformed(java.awt.event.ActionEvent evt) {
try {
URL url = new URL("http://mini-mk-market.com/music/PitBulll.wav");
Clip clip = AudioSystem.getClip();
AudioInputStream ais;
ais = AudioSystem.getAudioInputStream(url);
clip.open(ais);
clip.loop(0);
clip.start();
new Thread(new Start()).start();
} catch (Exception ex) {
JOptionPane.showMessageDialog(null, "Can't find Internet Connection !");
}
}
public static void main(String args[]) {
try {
for (javax.swing.UIManager.LookAndFeelInfo info:
javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(Music.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(Music.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(Music.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(Music.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
//new Music().setVisible(true);
}
});
}
private class Start implements Runnable {
@Override
public void run() {
for (int x = 0; x < 101; x++) {
ProgressBar.setValue(x);
ProgressBar.repaint();
try {
Thread.sleep(50);
} catch (Exception ex) {
}
}
}
}
答
您可能正在寻找ProgressMonitorInputStream
。在How to Use Progress Monitors中有一个讨论,并且在ProgressMonitorDemo
中有一个例子。
+0
家伙我真的不能这样做,请帮助..:/ – user2133393 2013-03-06 11:10:19
这是一个很多的代码。你可以把它归结为一个能证明问题的最小例子吗?例如,外观和窗口居中的东西都不直接相关。 – 2013-03-04 21:12:33
不要从Event Dispatching Thread外部更新/创建任何UI组件! – MadProgrammer 2013-03-04 21:20:09
给我看一些exsample我不能得到它像这样...:S – user2133393 2013-03-04 21:26:30