惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

aimingoo的专栏
aimingoo的专栏
Engineering at Meta
Engineering at Meta
有赞技术团队
有赞技术团队
博客园_首页
Apple Machine Learning Research
Apple Machine Learning Research
Vercel News
Vercel News
G
Google Developers Blog
Blog — PlanetScale
Blog — PlanetScale
IT之家
IT之家
MongoDB | Blog
MongoDB | Blog
Y
Y Combinator Blog
B
Blog
The GitHub Blog
The GitHub Blog
M
MIT News - Artificial intelligence
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Stack Overflow Blog
Stack Overflow Blog
C
Check Point Blog
Microsoft Azure Blog
Microsoft Azure Blog
D
DataBreaches.Net
I
InfoQ
Recent Announcements
Recent Announcements
阮一峰的网络日志
阮一峰的网络日志
腾讯CDC
H
Help Net Security

博客园 - FantasySoft

PHP菜鸟手记——如何解决无法装载动态链接库的问题 穿在身上的手机——M-Dress 团购之道——双赢才是核心 Demand Media——深谙中庸之道的新媒体 云中谁寄锦书来,盛大也! 《黑客》月刊中文版第一期正式发布,很给力!推荐围观! 比尔•盖茨:未来最好的教育来自互联网 为了生活更美好,玩游戏吧! 三言两语话委托 IronPython Tools——为IronPython度身定做的IDE 从博客园口水仗想到的 lambda与闭包 由XML Literal引发的思考 作为.NET程序员,您需要IronPython么? 静态注册BroadcastReceiver的注销问题 大道至简——Michael看iPad 波哥大BRT带来的启示 Timberland的企业社会责任 比尔•盖茨谈教育
CaptureDeviceManager.getDeviceList方法返回null对象问题探究
FantasySoft · 2010-07-10 · via 博客园 - FantasySoft

2010-07-10 23:49  FantasySoft  阅读(5853)  评论()    收藏  举报

最近由于项目的需要,偶开始倒腾Java的媒体框架——Java Media Framework(缩写为JMF)。在编写一个实时语音聊天的程序的时候,需要使用以下方法获得音频采集设备的列表:

  • CaptureDeviceManager.getDeviceList(Format format)

这是一个很简单的方法。但是,当我在Eclipse中将代码编译完毕并且运行之,这个方法却返回了null,而不是所预期的音频采集设备列表!通过搜索,我发现也有不少朋友也遇到了这样的问题,更是有朋友发现在IDE中运行JMF程序的时候,该方法返回null,但是在命令行的状态下运行程序却能得到正确的结果。于是乎,我把问题锁定到classpath上面,毕竟在IDE中运行程序,所使用的classpath是有IDE本身确定的。以Eclipse为例,我们可以在RUN Configurations中对classpath进行设置如下图所示:

那么,我们又该对classpath进行怎样的设置呢?原来,出现这样的问题是在于JMF无法找到自己安装时所生成的jmf.properties文件(位于JMF安装目录下的lib中)。在IDE中运行程序的时候,classpath并没有指向JMF安装目录下lib中的jmf.jar,所以,程序就找不到jmf.properties文件,也就没法获得设备列表了。将jmf.jar加入至classpath,程序运行正常。

该问题的解决方案虽然很简单,但是,Michael觉得有必要将其记录下来,毕竟它的出现确实让人太迷惑了。因为在默认的JRE System Library中就包含了jmf.jar(除了jmf.jar之外,还有sound.jar,这两个位于jdk.home/jre/lib/ext目录下的jar包实际上是在安装JMF的时候,安装程序复制到该目录下的),也就是说,我们并不需要添加其它的jar都可以编译并且运行基于JMF的程序了。这无疑为问题的解决平添了一道屏障,而中文的论坛以及博客也没有给出该问题的解决方案。有关该问题解答的英文版本在这里。(补充:为了能够同时使用开源的FMJ和JMF对项目进行测试,最简单的办法就是将位于jdk.home/jre/lib/ext目录下的jmf.jar以及sound.jar删除

这个问题让Michael了解到:在编写以及发布JMF程序的时候,我们需要关注jmf.properties文件的位置以及如何根据不同的机器生成该文件。毕竟不是没一台机器都安装的jmf,如果需要发布基于JMF的程序,我们又应该做足哪些准备工作呢?这是由该问题引发的疑问,您是否有答案呢?欢迎您的回复,谢谢!