首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java FX 2警报声音

Java FX 2警报声音
EN

Stack Overflow用户
提问于 2012-05-17 20:58:42
回答 3查看 11.4K关注 0票数 8

如何在Java FX 2中播放警报声?有没有办法使用操作系统的默认通知声音?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-18 17:39:22

使用纯JavaFX播放声音

只需使用AudioClip的一个实例。这是一个非常适合于只播放单一的短声音。

播放默认通知声音

关于Windows,有一种通过java.awt.Toolkit访问属性的方法。返回的声音属性是一个简单的Runnable,它可以直接触发,而无需担心声源等问题。

使用下面的例子来看看这两个选项是如何工作的(你必须将'alert.wav‘添加到你的src文件夹中)。

代码语言:javascript
复制
package audioplayer;

import java.awt.Toolkit;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.VBox;
import javafx.scene.media.AudioClip;
import javafx.stage.Stage;

public class AudioPlayer extends Application {

    private static final AudioClip ALERT_AUDIOCLIP = new AudioClip(AudioPlayer.class.getResource("/alert.wav").toString());

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        VBox root = new VBox();
        Scene scene = new Scene(root, 300, 250);

        Button btn = new Button();
        btn.setText("Play (My Sound)");
        btn.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent event) {
                AudioPlayer.ALERT_AUDIOCLIP.play();
            }
        });

        Button btn2 = new Button();
        btn2.setText("Play (Windows Default)");
        btn2.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent event) {
                final Runnable runnable = (Runnable) Toolkit.getDefaultToolkit().getDesktopProperty("win.sound.default");

                if (runnable != null) {
                    runnable.run();
                }
            }
        });

        root.getChildren().add(btn);
        root.getChildren().add(btn2);

        primaryStage.setScene(scene);
        primaryStage.show();
    }
}
票数 10
EN

Stack Overflow用户

发布于 2012-05-19 02:13:36

目前,JavaFX本身没有任何东西可以访问操作系统的默认警报声音(您可以使用JavaFX来触发事件,以回放和忘记音频片段以及跟踪的媒体音频,如mp3s)。

有一个开放的特性请求:RT-21634 (任何人都可以注册查看jira)。

您可以通过awt发出蜂鸣声:

代码语言:javascript
复制
Toolkit.getDefaultToolkit().beep();

根据谷歌搜索,打印一个叫007的蜂鸣音字符应该可以,但在我的机器上不能-我猜它访问的是机器中的蜂鸣器,而不是扬声器系统,我的机器一定没有连接或启用蜂鸣器。

代码语言:javascript
复制
System.out.print("\007");
System.out.flush();
票数 8
EN

Stack Overflow用户

发布于 2012-05-18 07:18:38

这就是我播放声音的方式

代码语言:javascript
复制
private void playMedia(Media m){
    if (m != null){
        MediaPlayer mp = new MediaPlayer(m);
        mp.play();
    }
}

public void playSomeSound(){
    try{
        Media someSound = new Media(getClass().getResource("some-sound.mp3").toString());
        playMedia(someSound);
    }catch(Exception ex){
        GeeLogger.error(getClass(), ex.getLocalizedMessage(), ex);
    }

}

不过,我不知道这么多细节。希望能有所帮助。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10636194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档