2016-12-15 2 views
0

ボックスをクリックすると音楽がうまく動作しますが、音楽を再度クリックしても音楽は停止しません。その後、チェックボックスをもう一度クリックすると、音楽が再び2回再生されます。音楽を止めるのを手伝ってください!CheckBoxのサウンドが停止する

import java.awt.event.WindowEvent; 
import java.io.IOException; 
import java.io.InputStream; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.swing.Icon; 
import javax.swing.ImageIcon; 
import javax.swing.JOptionPane; 
import sun.audio.AudioPlayer; 
import sun.audio.AudioStream; 
private void jCheckBox1ActionPerformed(java.awt.event.ActionEvent evt) {           
    InputStream inputStream = getClass().getResourceAsStream("panda - desiigner (donald trump remix).au"); 
    AudioStream audioStream = null; 

try { 
    audioStream = new AudioStream(inputStream); 
} catch (IOException ex) { 
    Logger.getLogger(kekFrame.class.getName()).log(Level.SEVERE, null, ex); 
} 
int check; 
if(jCheckBox1.isSelected() == true){ 
    check = 1; 
} else { 
    check = 0; 
} 
switch (check) { 
    case 1 : AudioPlayer.player.start(audioStream); 
      System.out.println("Music has started playing"); 
      break; 
    case 0 : AudioPlayer.player.stop(audioStream); 
      System.out.println("Music has stopped playing"); 
      break; 
} 



}           

/** 
* @param args the command line arguments 
*/ 


// Variables declaration - do not modify      
private javax.swing.JCheckBox jCheckBox1; 
+0

AudioPlayerのコードも共有してください –

+0

どこでどうすればいいですか? –

+1

@DarkKnight 'import sun.audio.AudioPlayer;'は、(Oracle)JRE内部の文書化されていない(利用可能なソースがありません)クラスです。 OP:これらのクラスは使用しないでください。代わりに、 '' javax.sound.sampled'パッケージの['Clip'](http://docs.oracle.com/javase/8/docs/api/javax/sound/sampled/Clip.html)を使用してください。 –

答えて

0

あなたが適切にクリップを作成したと仮定すると、それとJCheckBoxの状態を反映したブール(isSelected、言う)の両方にアクセスすることができ、次の簡単なコードは動作するはずです:

if (isSelected) 
    { 
     clip.setFramePosition(0); 
     clip.start(); 
    } 
    else 
    { 
     clip.stop(); 
    } 

これは、JCheckBoxのActionListenerに含めることができます。

クリップの使用に関する詳細は、Javaチュートリアルの「オーディオスレッド」のクリップhereの詳細を参照してください。 Java Clipの使用方法を検索すると、他の場所でも明確な例があります。オーディオ用の公式Javaチュートリアルでは、実践的な例を犠牲にして、バックグラウンドと高レベルの概念を強調しています。

sun.audio.AudioPlayerはサポートされなくなりました。それがあなたのPCで動作しても、それが他のシステムで動作する保証はありません。残念ながら、これは古くなったコード例がブログや非公式のチュートリアルに掲載されている状況です。言語が進化するにつれて多くのことが起こり、チュートリアルを書いた当事者は自分の投稿を更新または維持しません。


OPの要求に応じて、ここに私のJavaFX GUIの1つから適応された例があります。私はもうスイングを使わないし、元気に戻っていない。

btnPlay = new Button("Play"); 
    btnPlay.setOnAction(e -> handlePlay(e)); 

これは、次のメソッドを呼び出し:このコードで

private void handlePlay(ActionEvent e) 
{ 
    if (!isPlaying) 
    { 
     clip.setFramePosition(0); 
     clip.start(); 
     ((Button)e.getSource()).setText("STOP"); 
     isPlaying = true; 
    } 
    else 
    { 
     clip.stop(); 
     ((Button)e.getSource()).setText("PLAY"); 
     isPlaying = false; 
    } 
} 

を、isPlayingは、この場合に、そのインスタンス変数であるJavFX Buttonが構築されているコードで

単にボタンがオンかオフかを教えてくれるだけです。ボタンがまだ「再生中」の状態にある間は、クリップが最後まで再生され、停止することがあります。クリップの再生が終了すると、ボタンを元に戻すためにLineListenerを配線する必要があります。

多分上記を何かに役立てることができますか? JCheckBoxの選択は不思議で、JToggleButtonが良い選択かもしれません。スイングボタンのリスナーの作成例はhereです。

+0

フルコードをお願いしますか? –

+0

それはたくさんの助けになります。 –

+0

okここでクリップを試しましたが、同じことを行います –

関連する問題