Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
5e4264d3
D
dragonwell8_jdk
项目概览
openanolis
/
dragonwell8_jdk
通知
4
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_jdk
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
5e4264d3
编写于
3月 03, 2011
作者:
A
amenkov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
6660470: RealTimeSequencer incorrectly opens (implicitly) synthesizer
Reviewed-by: stayer
上级
c11fc174
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
120 addition
and
10 deletion
+120
-10
src/share/classes/com/sun/media/sound/RealTimeSequencer.java
src/share/classes/com/sun/media/sound/RealTimeSequencer.java
+10
-3
src/share/classes/javax/sound/midi/MidiSystem.java
src/share/classes/javax/sound/midi/MidiSystem.java
+0
-7
test/javax/sound/midi/Sequencer/SequencerImplicitSynthOpen.java
...avax/sound/midi/Sequencer/SequencerImplicitSynthOpen.java
+110
-0
未找到文件。
src/share/classes/com/sun/media/sound/RealTimeSequencer.java
浏览文件 @
5e4264d3
...
...
@@ -775,15 +775,22 @@ class RealTimeSequencer extends AbstractMidiDevice implements Sequencer, AutoCon
Receiver
rec
=
null
;
// first try to connect to the default synthesizer
// IMPORTANT: this code needs to be synch'ed with
// MidiSystem.get
Receiv
er(boolean), because the same
// MidiSystem.get
Sequenc
er(boolean), because the same
// algorithm needs to be used!
try
{
Synthesizer
synth
=
MidiSystem
.
getSynthesizer
();
synth
.
open
();
if
(
synth
instanceof
ReferenceCountingDevice
)
{
rec
=
((
ReferenceCountingDevice
)
synth
).
getReceiverReferenceCounting
();
}
else
{
rec
=
synth
.
getReceiver
();
synth
.
open
();
try
{
rec
=
synth
.
getReceiver
();
}
finally
{
// make sure that the synth is properly closed
if
(
rec
==
null
)
{
synth
.
close
();
}
}
}
}
catch
(
Exception
e
)
{
// something went wrong with synth
...
...
src/share/classes/javax/sound/midi/MidiSystem.java
浏览文件 @
5e4264d3
...
...
@@ -441,13 +441,6 @@ public class MidiSystem {
Synthesizer
synth
=
getSynthesizer
();
if
(
synth
instanceof
ReferenceCountingDevice
)
{
rec
=
((
ReferenceCountingDevice
)
synth
).
getReceiverReferenceCounting
();
// only use MixerSynth if it could successfully load a soundbank
if
(
synth
.
getClass
().
toString
().
contains
(
"com.sun.media.sound.MixerSynth"
)
&&
(
synth
.
getDefaultSoundbank
()
==
null
))
{
// don't use this receiver if no soundbank available
rec
=
null
;
synth
.
close
();
}
}
else
{
synth
.
open
();
try
{
...
...
test/javax/sound/midi/Sequencer/SequencerImplicitSynthOpen.java
0 → 100644
浏览文件 @
5e4264d3
/**
* @test
* @bug 6660470
* @summary Tests that sequencer correctly opens/closes (implicitly) devices
* @author Alex Menkov
*/
import
java.util.List
;
import
javax.sound.midi.MidiDevice
;
import
javax.sound.midi.MidiDeviceReceiver
;
import
javax.sound.midi.MidiSystem
;
import
javax.sound.midi.MidiUnavailableException
;
import
javax.sound.midi.Receiver
;
import
javax.sound.midi.Sequencer
;
import
javax.sound.midi.Transmitter
;
public
class
SequencerImplicitSynthOpen
{
static
int
TEST_COUNT
=
5
;
public
static
void
main
(
String
[]
args
)
{
try
{
log
(
"getting sequencer..."
);
Sequencer
sequencer
=
MidiSystem
.
getSequencer
();
log
(
" - got "
+
getDeviceStr
(
sequencer
));
// obtain connected device (usually synthesizer)
MidiDevice
synth
=
getConnectedDevice
(
sequencer
);
if
(
synth
==
null
)
{
log
(
"could not get connected device, returning"
);
return
;
}
log
(
"connected device: "
+
getDeviceStr
(
synth
));
int
success
=
0
;
for
(
int
i
=
0
;
i
<
TEST_COUNT
;
i
++)
{
if
(
test
(
sequencer
))
{
success
++;
}
}
if
(
success
!=
TEST_COUNT
)
{
throw
new
RuntimeException
(
"test FAILS"
);
}
}
catch
(
MidiUnavailableException
ex
)
{
// this is not a failure
log
(
"Could not get Sequencer"
);
}
log
(
"test PASSED."
);
}
static
boolean
test
(
Sequencer
sequencer
)
throws
MidiUnavailableException
{
log
(
""
);
log
(
"opening sequencer..."
);
sequencer
.
open
();
// opens connected synthesizer implicitly
MidiDevice
synth
=
getConnectedDevice
(
sequencer
);
log
(
" connected device: "
+
getDeviceStr
(
synth
));
log
(
"closing sequencer..."
);
sequencer
.
close
();
// closes the synth implicitly
log
(
" synth is "
+
getDeviceStr
(
synth
));
MidiDevice
synth2
=
getConnectedDevice
(
sequencer
);
log
(
" currently connected device: "
+
getDeviceStr
(
synth2
));
if
(
synth
!=
null
&&
synth
.
isOpen
())
{
log
(
"FAIL."
);
return
false
;
}
log
(
"OK."
);
return
true
;
}
static
MidiDevice
getConnectedDevice
(
Sequencer
sequencer
)
{
List
<
Transmitter
>
trans
=
sequencer
.
getTransmitters
();
log
(
" sequencer has "
+
trans
.
size
()
+
" opened transmitters:"
);
for
(
Transmitter
tr:
trans
)
{
Receiver
r
=
tr
.
getReceiver
();
log
(
" "
+
getClassStr
(
tr
)
+
" connected to "
+
getClassStr
(
r
));
if
(
r
instanceof
MidiDeviceReceiver
)
{
MidiDeviceReceiver
recv
=
(
MidiDeviceReceiver
)
r
;
MidiDevice
dev
=
recv
.
getMidiDevice
();
log
(
" - receiver of "
+
getClassStr
(
dev
));
return
dev
;
}
else
{
log
(
" - does NOT implement MidiDeviceReceiver"
);
}
}
return
null
;
}
static
String
getClassStr
(
Object
o
)
{
if
(
o
==
null
)
{
return
"<null>"
;
}
return
o
.
getClass
().
getName
();
}
static
String
getDeviceStr
(
MidiDevice
dev
)
{
if
(
dev
==
null
)
{
return
"NULL"
;
}
return
getClassStr
(
dev
)
+
", "
+
(
dev
.
isOpen
()
?
"OPENED"
:
"CLOSED"
);
}
static
void
log
(
String
s
)
{
System
.
out
.
println
(
s
);
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录