スレッドの自動終了について。
クリップをファイルから取得し、[1]キーが押されるとクリップが再生され、クリップ再生中の場合は
ファイル名を表示したラベルに色を着けるプログラムを作ってみたのですが
1度のみなら正しく作動するのですが、2回目にキーを押そうとすると、クリップだけ再生しラベルの色は黒いままです。
そして、3回目以降はキーをいくら押してもクリップが再生されません。
これを正しく動作させるにはどのようにしたらよいでしょうか。
キーリスナ、スレッド、アクションリスナの内容を記載しますので、ご指導頂けたらと思います。
class ClipWatching extends Thread
{
public ClipWatching()
{
}
public void run()
{
while(clip1.isRunning())
{
lb1.setForeground(Color.red);
}
lb1.setForeground(Color.black);
thread = false;
}
}
class SampleKeyListener implements KeyListener
{
public void keyPressed(KeyEvent e)
{
if(e.getKeyCode() == KeyEvent.VK_1)
{
try{
if(thread == false)
{
cw.join();
}
clip1.start();
cw.start();
thread = true;
}
catch(Exception uu)
{
}
}
}
public void keyReleased(KeyEvent e){
}
public void keyTyped(KeyEvent e){
}
}
class SampleActionListener implements ActionListener
{
public void shori()
{
}
public void actionPerformed(ActionEvent e)
{
try
{
if(e.getSource() == bt1)
{
fl1 = new File("001.wav");
lb1.setText(fl1 + "");
ais1 = AudioSystem.getAudioInputStream(fl1);
format1 = ais1.getFormat();
info1 = new DataLine.Info(Clip.class, format1);
clip1 = (Clip) AudioSystem.getLine(info1);
clip1.open(ais1);
}
}
catch(Exception ex)
{
}
}
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
なんかよく解らないので、wavファイルを鳴らし、プログレスバーで
進捗を表してみました。
スレット処理もしています。
ボタンを押せば、何回も繰り返します。
アプレットなく、JFrameを利用しています。自分用に
応用してみてださい。
public class wave_file extends javax.swing.JFrame {
Thread th = null;
Runnable rn = null;
long filelong =0;
long filebyte =0;
/** Creates new form wave_file */
public wave_file() {
initComponents();
rn = new Runnable() {
public void run() {
try {
File fn = new File("\hamazaki.WAV");
filelong = fn.length();
AudioInputStream ais = AudioSystem.getAudioInputStream(fn);
AudioFormat af = ais.getFormat();
DataLine.Info info = new DataLine.Info(SourceDataLine.class, af);
SourceDataLine line = (SourceDataLine) AudioSystem.getLine(info);
line.open(af);
line.start();
int nbr = 0;
byte[] data = new byte[128000];
filebyte = 0;
while (nbr != -1) {
nbr = ais.read(data, 0, data.length);
filebyte = filebyte + data.length;
jProgressBar1.setValue((int) ((double)filebyte /(double)filelong * 100.0));
if (nbr >= 0) {
int nbw = line.write(data, 0, nbr);
}
}
line.drain();
line.close();
} catch (UnsupportedAudioFileException unsupportedAudioFileException) {
unsupportedAudioFileException.printStackTrace();
} catch (IOException iOException) {
iOException.printStackTrace();
} catch (LineUnavailableException lineUnavailableException) {
lineUnavailableException.printStackTrace();
}
}
};
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jButton1 = new javax.swing.JButton();
jProgressBar1 = new javax.swing.JProgressBar();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
getContentPane().setLayout(null);
jButton1.setText("jButton1");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
getContentPane().add(jButton1);
jButton1.setBounds(282, 248, 75, 21);
jProgressBar1.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
getContentPane().add(jProgressBar1);
jProgressBar1.setBounds(51, 72, 146, 19);
pack();
}// </editor-fold>
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
th = new Thread(rn);
th.start();
// TODO add your handling code here:
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new wave_file().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JProgressBar jProgressBar1;
// End of variables declaration
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Java java final 1 2022/06/10 22:49
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- C言語・C++・C# Windows Formアプリからコンソールを呼び出して文字を出力させたい 8 2023/05/09 10:53
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- Java 直し方について教えて頂きたいです。 4 2022/08/13 02:11
- Java eclipse実行ができない 2 2022/07/27 04:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ペイントソフトを作っているの...
-
GetDIBits関数の使い方について
-
マルチスレッドプログラムから...
-
JButtonの画像をactionPerforme...
-
C#で別のFormへ複数の値を返そ...
-
エンターキーを押すとOKボタン...
-
Java ボールが動くアニメーション
-
Junitテストでvoid戻り値メッソ...
-
C# LISTBOXの複数項目取得
-
Processingでマウスクリックで...
-
struts2のchainで値の受け渡し...
-
C# visibleプロパティをfalseに...
-
C#で、あるクラスのメンバーす...
-
デスクトップマスコットのドラ...
-
Log4jで機能毎に別ファイルへ出...
-
このプログラミング誰か教えて...
-
C言語のポインターに関する警告
-
Javaで改行などが出来ないのです。
-
flush()とclose()について
-
javaで質問です。 文字列2023/2...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
大量のデータを読み込んで表示...
-
ボタンの複数割り当てについて
-
C#で、あるクラスのメンバーす...
-
Junitテストでvoid戻り値メッソ...
-
C#でのWNetAddConnection3の使...
-
C# 矢印キーの取得
-
Thread.sleepのInterruptedExce...
-
unityでのC++エラーの原因がわ...
-
C#で別のFormへ複数の値を返そ...
-
C# visibleプロパティをfalseに...
-
エンターキーを押すとOKボタン...
-
Processingでマウスクリックで...
-
[C#.net]スレッド化された別フ...
-
C#でキーイベントが発生しない...
-
C# DataGridView列カスタマイズ
-
【C#】ソースコードをファイル...
-
LVM_SETITEMSTATEでListViewの...
-
GetDIBits関数の使い方について
-
未割り当てのローカル変数
-
C# MouseHoverを何度も呼ぶには
おすすめ情報