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

推荐订阅源

Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Application and Cybersecurity Blog
Application and Cybersecurity Blog
T
Threat Research - Cisco Blogs
Latest news
Latest news
Project Zero
Project Zero
TaoSecurity Blog
TaoSecurity Blog
Cyberwarzone
Cyberwarzone
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Google DeepMind News
Google DeepMind News
P
Privacy & Cybersecurity Law Blog
T
Troy Hunt's Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
AWS News Blog
AWS News Blog
Hacker News: Ask HN
Hacker News: Ask HN
S
Security @ Cisco Blogs
C
Cisco Blogs
Help Net Security
Help Net Security
I
Intezer
W
WeLiveSecurity
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
腾讯CDC
S
Secure Thoughts
MyScale Blog
MyScale Blog
Recorded Future
Recorded Future
G
GRAHAM CLULEY
L
LINUX DO - 热门话题
A
About on SuperTechFans
C
CXSECURITY Database RSS Feed - CXSecurity.com
IT之家
IT之家
J
Java Code Geeks
The Hacker News
The Hacker News
阮一峰的网络日志
阮一峰的网络日志
Scott Helme
Scott Helme
Recent Announcements
Recent Announcements
AI
AI
Cisco Talos Blog
Cisco Talos Blog
B
Blog RSS Feed
V
Vulnerabilities – Threatpost
C
Check Point Blog
Security Latest
Security Latest
S
SegmentFault 最新的问题
T
The Exploit Database - CXSecurity.com
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
M
MIT News - Artificial intelligence
T
The Blog of Author Tim Ferriss
Attack and Defense Labs
Attack and Defense Labs
PCI Perspectives
PCI Perspectives
Recent Commits to openclaw:main
Recent Commits to openclaw:main
T
Tailwind CSS Blog
Apple Machine Learning Research
Apple Machine Learning Research

博客园 - 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的程序,我们又应该做足哪些准备工作呢?这是由该问题引发的疑问,您是否有答案呢?欢迎您的回复,谢谢!