回答編集履歴

1

補足

2016/10/18 15:24

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

test CHANGED
@@ -3,3 +3,93 @@
3
3
 
4
4
 
5
5
  スレッドを起動する時間も気になるほど大きいなら常時専用スレッドを起動しておく方がよいかも知れません。スレッドプールサポート用クラスもあるのですが、もし大がかりなマルチスレッドのアプリケーションを作るのではなくとりあえずサウンドクリップを鳴らすだけといったものであれば自前で一つスレッドを起こして処理したほうがかえって簡単な気がします。
6
+
7
+
8
+
9
+ 追記:
10
+
11
+
12
+
13
+ UIスレッドから別スレッドをたたき起こすというのが最初難しいと思うのでその例をかいてみます。必ずしもよいコードではないのでもっとスッキリした書き方もあるようにも思いますが。コメントつける代わりに変数やメソッド名に日本語つかってます。
14
+
15
+ クリップを一度だけロードして繰り返し鳴らすのはClipのリファレンスをみてトライしてみてください。
16
+
17
+
18
+
19
+ ```
20
+
21
+ class Boo {
22
+
23
+ Object lock = new Object();
24
+
25
+ boolean 鳴らすのは今;
26
+
27
+
28
+
29
+ public static void main(...) {
30
+
31
+ Thread t = new Thread(() -> クリップスレッドの処理());
32
+
33
+ t.setDaemon(true);
34
+
35
+ t.start();
36
+
37
+ ... 画面をつくって表示
38
+
39
+ }
40
+
41
+
42
+
43
+ // 鳴らしたいときJavaFXアプリケーションスレッドからこれを直接呼び出せます
44
+
45
+ static void クリップスレッドさん再生してください() {
46
+
47
+ synchronized (lock) {
48
+
49
+ 鳴らすのは今 = true;
50
+
51
+ lock.notify();
52
+
53
+ }
54
+
55
+ }
56
+
57
+
58
+
59
+ void クリップスレッドの処理() {
60
+
61
+ try {
62
+
63
+ for (;;) { // アプリケーション終了まで無限ループ
64
+
65
+ synchornized (lock) {
66
+
67
+ lock.wait();
68
+
69
+ }
70
+
71
+ System.out.println("デバッグ用: スレッドが起きました");
72
+
73
+ if (鳴らすのは今) {
74
+
75
+ 鳴らすのは今 = false;
76
+
77
+ ...音を鳴らす処理
78
+
79
+ }
80
+
81
+ }
82
+
83
+ } catch (InterruptedException e) {
84
+
85
+ ;
86
+
87
+ }
88
+
89
+ }
90
+
91
+ }
92
+
93
+ ```
94
+
95
+