【发布时间】:2012-05-31 20:13:05
【问题描述】:
我目前正在Java 中编写一个测试程序,我希望能够在 GUI 应用程序上使用JSlider 来控制我的计算机的主 SPEAKER。我已经阅读了 AudioSystem 类上的 this 页面和 Controls 上的 this 页面。据我了解,我需要通过混音器获得一个端口或线路,然后在该线路或端口上建立一个控制。由于我正在控制音量,我需要实现一个FloatControl。我的程序编译没有问题,但是当我运行它并调整 JSlider 时,我在catch 子句下收到了错误消息。
这是我的测试程序:
import java.awt.BorderLayout;
import java.io.IOException;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.FloatControl;
import javax.sound.sampled.Mixer;
import javax.sound.sampled.Port;
import javax.swing.JFrame;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class speakerWork2
{
public static void main(String [] args)throws IOException
{
Frame speaker = new Frame();
}
}
class Frame extends JFrame
{
JSlider mainVolume = new JSlider(JSlider.VERTICAL,0,100,50);
public Frame()
{
super();
setVisible(true);
setResizable(false);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLayout(new BorderLayout());
setSize(100, 450);
setLocation(300,200);
add(mainVolume);
mainVolume.addChangeListener(new mainVolumeHandler());
}
public class mainVolumeHandler implements ChangeListener
{
int sliderVal = mainVolume.getValue();
public void setValue(FloatControl sliderVal)
{
}
public void stateChanged(ChangeEvent f)
{
Port SPEAKER;
FloatControl volCtrl;
try
{
Mixer mixer = AudioSystem.getMixer(null);
SPEAKER = (Port)mixer.getLine(Port.Info.SPEAKER);
SPEAKER.open();
volCtrl = (FloatControl) SPEAKER.getControl(
FloatControl.Type.VOLUME);
}
catch (Exception e)
{
System.out.println("Failed trying to find SPEAKER"
+ " VOLUME control: exception = " + e);
}
}
}
}
当我运行上述程序时,异常 e 打印:
java.lang.IllegalArgumentException: Line unsupported: SPEAKER target port
当我在计算机上查询混音器、线路和端口时,我的扬声器得到以下结果...
mixer name: Port Speakers / Headphones (IDT High Definition Audio CODEC)
Line.Info: SPEAKER target port
volCtrl.getValue() = 1.0
我做错了什么,我需要做什么来纠正自己?
【问题讨论】:
-
请学习如何使用代码格式化。 :(
-
感谢安德鲁编辑该帖子。我正在使用“在此处输入代码”功能,但是每当我粘贴我的代码时,它都没有正确显示。我尽我所能。如果您有任何建议,我很想听听。
-
对于代码块,我通常会 1) 粘贴代码。 2) 选择代码块。 3) 点击代码按钮。 *** 所选块应在每行缩进 4 个空格以产生“代码”效果。在代码块之前必须有一个完整的空白行。有时它们在列表末尾的格式不正确,但可以通过插入
---来修复水平线。我没有太多经验先单击放置enter code here的按钮,可能是因为我的第一次尝试和你的一样不成功,我找到了更可靠的方法来做到这一点。 ;) -
好的,非常感谢 =)。下次我发布代码时,我会参考这条评论!
标签: java swing user-interface javasound jslider