教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 政务民生 >

JAVA 技术文章收集(2)

来源:网络收集 时间:2026-07-25
导读: { if (cmd.equals(\ return true; if (cmd.equals(\ return true; else return false; } public void process(File commandFile) throws FileNotFoundException { Scanner scanner = new Scanner(commandFile); //

{ if (cmd.equals(\ return true; if (cmd.equals(\ return true; else return false; } public void process(File commandFile) throws FileNotFoundException { Scanner scanner = new Scanner(commandFile); // Commands come in a verb/number/noun or verb form while (scanner.hasNext()) { String verb = scanner.next(); if (verb.equals(\ { int num = scanner.nextInt(); String type = scanner.next(); fetch (num, type); } else if (verb.equals(\ { String item = scanner.next(); String to = scanner.next(); String target = scanner.next(); attach(item, target); } else if (verb.equals(\ { admire(); } else { System.out.println(\ + verb + \ } } } public void fetch(int number, String type) { if (parts.get(type) == null) { System.out.println(\ + type + (number > 1 ? \ parts.put(type, number); } else { System.out.println(\ + type + (number > 1 ? \ Integer currentTotal = parts.get(type); parts.put(type, currentTotal + number); } System.out.println(\ } public void attach(String item, String target) { System.out.println(\ target + \ } public void admire() { System.out.println(\ } private Map parts = new HashMap(); } 假设 Igor 已在 ServantLoader 中注册,可以很方便地将 can() 调用改得更实用,并重用前面的 Servant 代码,如清单 9 所示: 清单 9. Igor 做了什么 import java.io.*; import java.util.*; public class Servant { public static void main(String[] args) throws IOException { ServiceLoader servantLoader = ServiceLoader.load(IPersonalServant.class); IPersonalServant i = null; for (IPersonalServant ii : servantLoader) if (ii.can(\ i = ii; if (i == null) throw new IllegalArgumentException(\ for (String arg : args) { i.process(new File(arg)); } } } 真正 DSL 实现显然不会仅仅打印到标准输出流。我把追踪哪些部分、跟随哪些部分的细节留待给您(当然,还有忠诚的 Igor)。

4、 Timer

java.util.Timer 和 TimerTask 类提供了方便、相对简单的方法可在定期或一次性延迟的基础上执行任务: 清单 10. 稍后执行

import java.util.*; public class Later { public static void main(String[] args) { Timer t = new Timer(\ t.schedule(new TimerTask() { public void run() { System.out.println(\ System.exit(0); } }, 1 * 1000); System.out.println(\ } } Timer 有许多 schedule() 重载,它们提示某一任务是一次性还是重复的,并且有一个启动的 TimerTask 实例。TimerTask 实际上是一个 Runnable(事实上,它实现了它),但还有另外两个方法:cancel() 用来取消任务,scheduledExecutionTime() 用来返回任务何时启动的近似值。

请注意 Timer 却创建了一个非守护线程在后台启动任务,因此在清单 10 中我需要调

用 System.exit() 来取消任务。在长时间运行的程序中,最好创建一个 Timer 守护线程(使用带有指示守护线程状态的参数的构造函数),从而它不会让 VM 活动。

这个类没什么神奇的,但它确实能帮助我们对后台启动的程序的目的了解得更清楚。它还能节省一些 Thread 代码,并作为轻量级 ScheduledExecutorService(对于还没准备好了解整个 java.util.concurrent 包的人来说)。

5、 JavaSound

尽管在服务器端应用程序中不常出现,但 sound 对管理员有着有用的 “被动” 意义 — 它是恶作剧的好材料。尽管它很晚才出现在 Java 平台中,JavaSound API 最终还是加入了核心运行时库,封装在 javax.sound * 包 — 其中一个包是 MIDI 文件,另一个是音频文件示例(如普遍的 .WAV 文件格式)。

JavaSound 的 “hello world” 是播放一个片段,如清单 11 所示: 清单 11. 再放一遍,Sam public static void playClip(String audioFile) { try { AudioInputStream inputStream = AudioSystem.getAudioInputStream( this.getClass().getResourceAsStream(audioFile)); DataLine.Info info = new DataLine.Info( Clip.class, audioInputStream.getFormat() ); Clip clip = (Clip) AudioSystem.getLine(info); clip.addLineListener(new LineListener() { public void update(LineEvent e) { if (e.getType() == LineEvent.Type.STOP) { synchronized(clip) { clip.notify(); } } } }); clip.open(audioInputStream); clip.setFramePosition(0); clip.start(); synchronized (clip) { clip.wait(); } clip.drain(); clip.close(); } catch (Exception ex) { ex.printStackTrace(); } } 大多数还是相当简单(至少 JavaSound 一样简单)。第一步是创建一个文件的 AudioInputStream 来播放。为了让此方法尽量与上下文无关,我们从加载类的 ClassLoader 中抓取文件作为 InputStream。(AudioSystem 还需要一个 File 或 String,如果提前知道声音文件的具体路径。)一旦完成, DataLine.Info 对象就提供给 AudioSystem,得到一个 Clip,这是播放音频片段最简单的方法。(其他方法提供了对片段更多的控制 — 例如获取一个 SourceDataLine — 但对于 “播放” 来说,过于复杂)。

这里应该和对 AudioInputStream 调用 open() 一样简单。(“应该” 的意思是如果您没遇到下节描述的错误。)调用 start() 开始播放,drain() 等待播放完成,close() 释放音频线路。播放是在单独的线程进行,因此调用 stop() 将会停止播放,然后调用 start() 将会从播放暂停的地方重新开始;使用 setFramePosition(0) 重新定位到开始。 …… 此处隐藏:2559字,全部文档内容请下载后查看。喜欢就下载吧 ……

JAVA 技术文章收集(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/447928.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)