2014-11-22 102 views
0

从JComboBox中选择并按下按钮后,我无法播放声音文件。这个程序的目的就是要做到这一点。但是,按下按钮后,没有任何播放,并且没有错误报告。我的主要问题是这些类。无法从Java JComboBox播放声音

SMPanel.java

import java.awt.GridLayout; 
import javax.swing.JButton; 
import javax.swing.JComboBox; 
import javax.swing.JPanel; 

public class SMPanel 
{ 
    private JPanel mainPanel; 
    private JButton selectionButton; 

    SMListenerClass listener = new SMListenerClass(this); 
    public JComboBox comboBox; 

    static Object soundSelect; 



    public SMPanel() 
    { 
     mainPanel = new JPanel(); 
     mainPanel.setLayout(new GridLayout(2, 2)); 

     JComboBox comboBox = new JComboBox(); 
     comboBox.addItem("1"); 
     comboBox.addItem("2"); 
     comboBox.addItem("3"); 

     comboBox.setEditable(false); 
     soundSelect = comboBox.getSelectedItem().toString(); 
     comboBox.addActionListener(listener); 

     selectionButton = new JButton("Test (Play)"); 
     selectionButton.addActionListener(listener); 

     mainPanel.add(comboBox); 
     mainPanel.add(selectionButton); 


    } 


    public JPanel getPanel() 
    { 
     return mainPanel; 
    } 

    public static Object getSoundSelect() 
    { 
     return soundSelect; 
    } 

} 

SMListenerClass

import java.applet.Applet; 
import java.applet.AudioClip; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.io.File; 

public class SMListenerClass implements ActionListener 
{ 
    SMPanel play; 
    File soundFilePlay; 
    AudioClip soundPlay; 

    public SMListenerClass(SMPanel smPanel) 
    { 
     play = smPanel; 
    } 

    public void actionPerformed(ActionEvent arg0) 
    { 
     if(SMPanel.soundSelect.equals("1")) 
     { 
      soundFilePlay = new File("/Sounds/Railroad_Crossing_Bell.wav"); 
      try 
      { 
       soundPlay = Applet.newAudioClip(soundFilePlay.toURL()); 
      } 
      catch(Exception e) 
      { 
       e.printStackTrace(); 
      } 
      soundPlay.play(); 
      soundPlay.stop(); 
     } 
    } 
} 

我试图使用的java.applet播放声音,是有办法解决这个问题或变化代码以声音可以播放的方式播放。

附加说明:我正在使用Java SDK 8,本网站上的其他一些解决方案对我的程序无效。如果您需要更多信息,请询问。

+0

看看这[线程](http://stackoverflow.com/questions/26828282/why-do-i-get-only-hear-noise-after-changing-the-audio-input-in-java/ 26832131?noredirect = 1#comment42286661_26832131)首先是有帮助的。如果不是,请回到这里发表评论。 – hfontanez 2014-11-22 00:17:41

+1

小苹果变化不大,并且具有非常严格的沙盒安全设置,您可能无法从磁盘加载文件 – MadProgrammer 2014-11-22 00:21:44

+0

该线程对问题没有多大帮助,特别是对于我来说,仍然在开发本领域的技能和理解。无论如何,因为小程序是如你所说的那样具有限制性,你是否建议将小程序全部一起取出并用不同的库重新写入? – RDSparkle 2014-11-22 00:29:38

回答

0

看这个问题:How can I play sound in Java?

而且你为什么调用.stop().play之后()?这不就是不播放声音的原因吗?无论如何,不​​需要使用Applets。也可以使用新线程播放声音,因此加载和流式传输不会破坏用户界面。

+0

感谢您将线程连接起来,最终播放音效毫无问题。 – RDSparkle 2014-11-22 01:06:09