﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-千里冰封-随笔分类-JAVASE</title><link>http://www.blogjava.net/hadeslee/category/25394.html</link><description>JAVA 浓香四溢</description><language>zh-cn</language><lastBuildDate>Mon, 03 Aug 2009 01:48:52 GMT</lastBuildDate><pubDate>Mon, 03 Aug 2009 01:48:52 GMT</pubDate><ttl>60</ttl><item><title>开源JAVA音乐播放器YOYOPlayer1.2发布，全面改进歌词搜索</title><link>http://www.blogjava.net/hadeslee/archive/2009/08/03/289426.html</link><dc:creator>千里冰封</dc:creator><author>千里冰封</author><pubDate>Mon, 03 Aug 2009 01:10:00 GMT</pubDate><guid>http://www.blogjava.net/hadeslee/archive/2009/08/03/289426.html</guid><wfw:comment>http://www.blogjava.net/hadeslee/comments/289426.html</wfw:comment><comments>http://www.blogjava.net/hadeslee/archive/2009/08/03/289426.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/hadeslee/comments/commentRss/289426.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hadeslee/services/trackbacks/289426.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本项目的所有代码已移到google code,此前在sourceforge和java.net项目不再维护了，现在项目的地址为:<br>http://code.google.com/p/yoyoplayer<br>在使用过程中有任何问题，都欢迎在此留言。<br><br>1.2更新[2009-08-02]<br>1，全新的歌词搜索方式，使搜索率大大提高。<br>2，把整个代码全部移到google code上去。以前的sourceforge和java.net已经不再维护了。<br>&nbsp;&nbsp;<a href='http://www.blogjava.net/hadeslee/archive/2009/08/03/289426.html'>阅读全文</a><img src ="http://www.blogjava.net/hadeslee/aggbug/289426.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hadeslee/" target="_blank">千里冰封</a> 2009-08-03 09:10 <a href="http://www.blogjava.net/hadeslee/archive/2009/08/03/289426.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开源JAVA音乐播放器YOYOPlayer1.1.3发布</title><link>http://www.blogjava.net/hadeslee/archive/2008/07/29/218161.html</link><dc:creator>千里冰封</dc:creator><author>千里冰封</author><pubDate>Tue, 29 Jul 2008 05:04:00 GMT</pubDate><guid>http://www.blogjava.net/hadeslee/archive/2008/07/29/218161.html</guid><wfw:comment>http://www.blogjava.net/hadeslee/comments/218161.html</wfw:comment><comments>http://www.blogjava.net/hadeslee/archive/2008/07/29/218161.html#Feedback</comments><slash:comments>122</slash:comments><wfw:commentRss>http://www.blogjava.net/hadeslee/comments/commentRss/218161.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hadeslee/services/trackbacks/218161.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1.1.3更新[2008-07-28]<br><br>1,完全去除了其它的搜索部分,因为有些网页格式经常会变动,所以一段时间以后可能又搜不到歌词了,现在搜索歌词用的是百度的filetype:lrc 歌曲名-歌手名 的方式进行搜索.<br>2,更新了在线搜索歌词的时候,只能下载一首的情况,以前点了下载之后,整个界面就不可用了,要重新输入歌曲信息才可用,现在已经不做限制了.<br>3,修补了当以前下载并匹配的歌词文件不见的时候,会出现既不下载新的歌词也不提示出错,现在当以前的歌词文件不存在时,会自动上网搜索新的歌词.<br>&nbsp;&nbsp;<a href='http://www.blogjava.net/hadeslee/archive/2008/07/29/218161.html'>阅读全文</a><img src ="http://www.blogjava.net/hadeslee/aggbug/218161.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hadeslee/" target="_blank">千里冰封</a> 2008-07-29 13:04 <a href="http://www.blogjava.net/hadeslee/archive/2008/07/29/218161.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>更新XP后,JAVA获取时间出错的解决办法</title><link>http://www.blogjava.net/hadeslee/archive/2008/06/09/206767.html</link><dc:creator>千里冰封</dc:creator><author>千里冰封</author><pubDate>Mon, 09 Jun 2008 04:48:00 GMT</pubDate><guid>http://www.blogjava.net/hadeslee/archive/2008/06/09/206767.html</guid><wfw:comment>http://www.blogjava.net/hadeslee/comments/206767.html</wfw:comment><comments>http://www.blogjava.net/hadeslee/archive/2008/06/09/206767.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/hadeslee/comments/commentRss/206767.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hadeslee/services/trackbacks/206767.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 昨天XP自动更新,提示的时候,我不经意间看到了有一项更新是有关时区的更新,当时也没管什么,因为WINXP的自动更新总不会给电脑带来什么危害吧,谁知道,过了一段时间,正好我的程序要获取电脑的时候,却整整比我电脑上显示的时候少了八个小时.&nbsp;&nbsp;<a href='http://www.blogjava.net/hadeslee/archive/2008/06/09/206767.html'>阅读全文</a><img src ="http://www.blogjava.net/hadeslee/aggbug/206767.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hadeslee/" target="_blank">千里冰封</a> 2008-06-09 12:48 <a href="http://www.blogjava.net/hadeslee/archive/2008/06/09/206767.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java加密和数字签名编程</title><link>http://www.blogjava.net/hadeslee/archive/2008/05/31/204867.html</link><dc:creator>千里冰封</dc:creator><author>千里冰封</author><pubDate>Sat, 31 May 2008 09:32:00 GMT</pubDate><guid>http://www.blogjava.net/hadeslee/archive/2008/05/31/204867.html</guid><wfw:comment>http://www.blogjava.net/hadeslee/comments/204867.html</wfw:comment><comments>http://www.blogjava.net/hadeslee/archive/2008/05/31/204867.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hadeslee/comments/commentRss/204867.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hadeslee/services/trackbacks/204867.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本文主要谈一下密码学中的加密和数字签名，以及其在java中如何进行使用。对密码学有兴趣的伙伴，推荐看Bruce Schneier的著作：Applied Crypotography。在jdk1.5的发行版本中安全性方面有了很大的改进，也提供了对RSA算法的直接支持，现在我们从实例入手解决问题（本文仅是作为简单介绍）：&nbsp;&nbsp;<a href='http://www.blogjava.net/hadeslee/archive/2008/05/31/204867.html'>阅读全文</a><img src ="http://www.blogjava.net/hadeslee/aggbug/204867.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hadeslee/" target="_blank">千里冰封</a> 2008-05-31 17:32 <a href="http://www.blogjava.net/hadeslee/archive/2008/05/31/204867.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA音乐播放器YOYOPlayer1.1.2发布</title><link>http://www.blogjava.net/hadeslee/archive/2008/04/03/190647.html</link><dc:creator>千里冰封</dc:creator><author>千里冰封</author><pubDate>Thu, 03 Apr 2008 08:33:00 GMT</pubDate><guid>http://www.blogjava.net/hadeslee/archive/2008/04/03/190647.html</guid><wfw:comment>http://www.blogjava.net/hadeslee/comments/190647.html</wfw:comment><comments>http://www.blogjava.net/hadeslee/archive/2008/04/03/190647.html#Feedback</comments><slash:comments>87</slash:comments><wfw:commentRss>http://www.blogjava.net/hadeslee/comments/commentRss/190647.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hadeslee/services/trackbacks/190647.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1.1.2更新[2008-04-03]<br>1,更改了精品网页的歌词搜索部分,因为精品网页的内容发生了改变,如果不更改对应的搜索方式的话<br>将不能从精品网页上查询到歌词,无论怎么样,都对精品网页表示感谢,它的网址是:http://www.jpwy.net/gc<br>2,修正了程序在某些LINUX版本上的系统上打开会抛出异常而影响程序使用的BUG.<br>3,在歌词秀窗口去掉了作者的名字:),此前的不便,望各位用户原谅.<br>4,在使用过程中,有任何的建议,可以加作者的QQ:24325142,注明yoyoplayer,或者<br>登录http://www.blogjava.net/hadeslee上留言,此博客为作者的博客,再此感谢大家对yoyoplayer的支持.&nbsp;&nbsp;<a href='http://www.blogjava.net/hadeslee/archive/2008/04/03/190647.html'>阅读全文</a><img src ="http://www.blogjava.net/hadeslee/aggbug/190647.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hadeslee/" target="_blank">千里冰封</a> 2008-04-03 16:33 <a href="http://www.blogjava.net/hadeslee/archive/2008/04/03/190647.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>世界编程语言排行榜08年02月</title><link>http://www.blogjava.net/hadeslee/archive/2008/03/01/183147.html</link><dc:creator>千里冰封</dc:creator><author>千里冰封</author><pubDate>Sat, 01 Mar 2008 08:25:00 GMT</pubDate><guid>http://www.blogjava.net/hadeslee/archive/2008/03/01/183147.html</guid><wfw:comment>http://www.blogjava.net/hadeslee/comments/183147.html</wfw:comment><comments>http://www.blogjava.net/hadeslee/archive/2008/03/01/183147.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.blogjava.net/hadeslee/comments/commentRss/183147.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hadeslee/services/trackbacks/183147.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 注： TIOBE 世界编程语言排行榜展现了编程语言的流行趋势。每个月，都有最新的数据被更新。这份排行榜的数据取样来源于互联网上富有经验的程序员、商业应用、著名的搜索引擎（诸如谷歌、 MSN 、雅虎）的关键字排名、 Alexa 上的排名等。请注意这个排行榜只是反映了某个编程语言的热门程度 ,这并不代表它是一个最好的编程语言或是可以写出某些令人称赞的好程序。&nbsp;&nbsp;<a href='http://www.blogjava.net/hadeslee/archive/2008/03/01/183147.html'>阅读全文</a><img src ="http://www.blogjava.net/hadeslee/aggbug/183147.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hadeslee/" target="_blank">千里冰封</a> 2008-03-01 16:25 <a href="http://www.blogjava.net/hadeslee/archive/2008/03/01/183147.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>YOYOPlayer通过了审核,成为了sf上的一个项目</title><link>http://www.blogjava.net/hadeslee/archive/2008/01/17/175913.html</link><dc:creator>千里冰封</dc:creator><author>千里冰封</author><pubDate>Thu, 17 Jan 2008 05:54:00 GMT</pubDate><guid>http://www.blogjava.net/hadeslee/archive/2008/01/17/175913.html</guid><wfw:comment>http://www.blogjava.net/hadeslee/comments/175913.html</wfw:comment><comments>http://www.blogjava.net/hadeslee/archive/2008/01/17/175913.html#Feedback</comments><slash:comments>21</slash:comments><wfw:commentRss>http://www.blogjava.net/hadeslee/comments/commentRss/175913.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hadeslee/services/trackbacks/175913.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 前几天通过了,于是把代码通过svn上传到了sf的项目下,大家可以通过如下网址访问yoyoplayer的项目:<br>http://sourceforge.net/projects/yoyoplayer<br><br>SVN的地址是:https://yoyoplayer.svn.sourceforge.net/svnroot/yoyoplayer<br><br>大家可以通过subversion签出代码,也可以在项目页下面下载代码,也欢迎大家参与到项目中来.有需要参与的朋友请留下你们在sf上面的ID,以及自己要做的方面.&nbsp;&nbsp;<a href='http://www.blogjava.net/hadeslee/archive/2008/01/17/175913.html'>阅读全文</a><img src ="http://www.blogjava.net/hadeslee/aggbug/175913.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hadeslee/" target="_blank">千里冰封</a> 2008-01-17 13:54 <a href="http://www.blogjava.net/hadeslee/archive/2008/01/17/175913.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>YOYOPlayer开发手记(六)ListBar的实现</title><link>http://www.blogjava.net/hadeslee/archive/2008/01/16/174106.html</link><dc:creator>千里冰封</dc:creator><author>千里冰封</author><pubDate>Wed, 16 Jan 2008 05:12:00 GMT</pubDate><guid>http://www.blogjava.net/hadeslee/archive/2008/01/16/174106.html</guid><wfw:comment>http://www.blogjava.net/hadeslee/comments/174106.html</wfw:comment><comments>http://www.blogjava.net/hadeslee/archive/2008/01/16/174106.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/hadeslee/comments/commentRss/174106.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hadeslee/services/trackbacks/174106.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在YOYOPlayer的设置里面,开始每个单独的设置用的是JtabbedPane来分隔,后来觉得不太好看,于是就模仿千千静听的设置一样,做了一个ListBar的效果,把所有设置选项的标头放在左边,并加了一些效果,这样看上去更漂亮一些,呵呵.&nbsp;&nbsp;<a href='http://www.blogjava.net/hadeslee/archive/2008/01/16/174106.html'>阅读全文</a><img src ="http://www.blogjava.net/hadeslee/aggbug/174106.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hadeslee/" target="_blank">千里冰封</a> 2008-01-16 13:12 <a href="http://www.blogjava.net/hadeslee/archive/2008/01/16/174106.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>YOYOPlayer开发手记(五)歌词搜索</title><link>http://www.blogjava.net/hadeslee/archive/2008/01/15/174100.html</link><dc:creator>千里冰封</dc:creator><author>千里冰封</author><pubDate>Tue, 15 Jan 2008 05:22:00 GMT</pubDate><guid>http://www.blogjava.net/hadeslee/archive/2008/01/15/174100.html</guid><wfw:comment>http://www.blogjava.net/hadeslee/comments/174100.html</wfw:comment><comments>http://www.blogjava.net/hadeslee/archive/2008/01/15/174100.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/hadeslee/comments/commentRss/174100.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hadeslee/services/trackbacks/174100.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在做了歌词同步显示以后,还必须得做歌词搜索的动作,搜索分两种,一种是在搜索本地的特定目录,当然这些目录是可以设置的,还有一种是当本地搜索不到的时候,再到网络上去进行进一步的搜索,当然这些搜索都是起了一个新的线程在做的,否则就会卡到主线程播不出音乐来了.<br><br>说到歌词的搜索,就得说说什么样的歌词才叫匹配了呢,这个时候,就得提起前面写的标签读取器了,第一步是从音频文件里面读取标签,根据标签里的歌手名和歌曲名去本地搜索完全匹配的歌词文件,如果没有,则第二步,根据标签里面的歌曲名去本地搜索匹配的歌词文件,如果这一步还没有找到,就可能是确实没有这首歌的歌词,也可能是这首歌的标签是不合法的或者标签是错的,第三步就取歌曲的文件名做为歌曲名再去搜索一遍,如果还没有搜到,则说明本地没有了,这个时候再去网络上重复以上三个步骤,如果还没有搜索,那就直接显示歌词名在歌词面板了.<br>&nbsp;&nbsp;<a href='http://www.blogjava.net/hadeslee/archive/2008/01/15/174100.html'>阅读全文</a><img src ="http://www.blogjava.net/hadeslee/aggbug/174100.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hadeslee/" target="_blank">千里冰封</a> 2008-01-15 13:22 <a href="http://www.blogjava.net/hadeslee/archive/2008/01/15/174100.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>YOYOPlayer开发手记(四)歌词同步显示</title><link>http://www.blogjava.net/hadeslee/archive/2008/01/10/173489.html</link><dc:creator>千里冰封</dc:creator><author>千里冰封</author><pubDate>Thu, 10 Jan 2008 13:52:00 GMT</pubDate><guid>http://www.blogjava.net/hadeslee/archive/2008/01/10/173489.html</guid><wfw:comment>http://www.blogjava.net/hadeslee/comments/173489.html</wfw:comment><comments>http://www.blogjava.net/hadeslee/archive/2008/01/10/173489.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.blogjava.net/hadeslee/comments/commentRss/173489.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hadeslee/services/trackbacks/173489.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在最开始写netbeans插件的时候,就已经开始在想如何实现同步的歌词显示,并且当时也差不多实现了大概的框架,所以YOYOPlayer的歌词显示模块基本上和netbeans插件的歌词显示模块是一样的,只不过一些细节做了一些改进,比如每行歌词的渐入渐出,以后单行歌词实现的卡拉OK效果等等,并把一些设置集成到了整个YOYOPlayer的设置里面去了.<br>&nbsp;&nbsp;<a href='http://www.blogjava.net/hadeslee/archive/2008/01/10/173489.html'>阅读全文</a><img src ="http://www.blogjava.net/hadeslee/aggbug/173489.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hadeslee/" target="_blank">千里冰封</a> 2008-01-10 21:52 <a href="http://www.blogjava.net/hadeslee/archive/2008/01/10/173489.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>YOYOPlayer开发手记(三)APEv2标签读写</title><link>http://www.blogjava.net/hadeslee/archive/2008/01/09/173488.html</link><dc:creator>千里冰封</dc:creator><author>千里冰封</author><pubDate>Wed, 09 Jan 2008 15:42:00 GMT</pubDate><guid>http://www.blogjava.net/hadeslee/archive/2008/01/09/173488.html</guid><wfw:comment>http://www.blogjava.net/hadeslee/comments/173488.html</wfw:comment><comments>http://www.blogjava.net/hadeslee/archive/2008/01/09/173488.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/hadeslee/comments/commentRss/173488.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hadeslee/services/trackbacks/173488.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在写netbeans的音乐插件的时候,为了读取ID3v1标签,曾经写了一个ID3v1格式的标签读写器,但是ID3v1格式的扩展性却不太好,这个时候APEv2格式就很适合了,首先它的编码是很标准,都是统一UTF-8编码,不会出现乱码的问题,其次它的扩展性很好,并不像ID3v1一样限制128个字节.但是找了很多都没有找到APEv2的标签读写器,没办法,只能自己动手写了,在写之前必须了解APEv2格式标签的文件结构,具体的文件结构可以参见http://wiki.hydrogenaudio.org/index.php?title=APEv2_specification,刚看到这个网页的时候,看得云里雾里的,看了好久才明白它的结构.<br>&nbsp;&nbsp;<a href='http://www.blogjava.net/hadeslee/archive/2008/01/09/173488.html'>阅读全文</a><img src ="http://www.blogjava.net/hadeslee/aggbug/173488.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hadeslee/" target="_blank">千里冰封</a> 2008-01-09 23:42 <a href="http://www.blogjava.net/hadeslee/archive/2008/01/09/173488.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>YOYOPlayer开发手记(二)概述</title><link>http://www.blogjava.net/hadeslee/archive/2008/01/08/173483.html</link><dc:creator>千里冰封</dc:creator><author>千里冰封</author><pubDate>Tue, 08 Jan 2008 12:11:00 GMT</pubDate><guid>http://www.blogjava.net/hadeslee/archive/2008/01/08/173483.html</guid><wfw:comment>http://www.blogjava.net/hadeslee/comments/173483.html</wfw:comment><comments>http://www.blogjava.net/hadeslee/archive/2008/01/08/173483.html#Feedback</comments><slash:comments>12</slash:comments><wfw:commentRss>http://www.blogjava.net/hadeslee/comments/commentRss/173483.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hadeslee/services/trackbacks/173483.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在刚开始编码的时候,不知道从何下手,由于写YOYOPlayer之前用JMF写过一个类似的播放器,但是由于要安装JMF并且还需要另外安装MP3 plugin,总体来说不太方便,并且JMF的项目也是Sun的一个已经停止维护的项目了,并且用JMF有一个非常不好的地方,那就是经常会在播放的时候crack掉,我以前用JMF写的netbeans音乐插件就会出现这种问题,有时候音乐播得好好的,就突然netbeans退出了,基于这些考虑,所以放弃了使用JMF做为音乐播放框架的想法.&nbsp;&nbsp;<a href='http://www.blogjava.net/hadeslee/archive/2008/01/08/173483.html'>阅读全文</a><img src ="http://www.blogjava.net/hadeslee/aggbug/173483.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hadeslee/" target="_blank">千里冰封</a> 2008-01-08 20:11 <a href="http://www.blogjava.net/hadeslee/archive/2008/01/08/173483.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>YOYOPlayer开发手记(一)引子</title><link>http://www.blogjava.net/hadeslee/archive/2008/01/07/173435.html</link><dc:creator>千里冰封</dc:creator><author>千里冰封</author><pubDate>Mon, 07 Jan 2008 11:49:00 GMT</pubDate><guid>http://www.blogjava.net/hadeslee/archive/2008/01/07/173435.html</guid><wfw:comment>http://www.blogjava.net/hadeslee/comments/173435.html</wfw:comment><comments>http://www.blogjava.net/hadeslee/archive/2008/01/07/173435.html#Feedback</comments><slash:comments>13</slash:comments><wfw:commentRss>http://www.blogjava.net/hadeslee/comments/commentRss/173435.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hadeslee/services/trackbacks/173435.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 从最初的一无所有,到后来的丰富,都是一个过程,也许有些人能经历这些过程,有些人经历不了这过程,但是我们都可以体会这个过程.在写YOYOPlayer 的一个多月的时间里,经历过的事情,写下来算是一个纪念吧.也不至于自己在多年以后的某天回首往事的时候会恍然若失.&nbsp;&nbsp;<a href='http://www.blogjava.net/hadeslee/archive/2008/01/07/173435.html'>阅读全文</a><img src ="http://www.blogjava.net/hadeslee/aggbug/173435.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hadeslee/" target="_blank">千里冰封</a> 2008-01-07 19:49 <a href="http://www.blogjava.net/hadeslee/archive/2008/01/07/173435.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA音乐播放器YOYOPlayer1.1发布</title><link>http://www.blogjava.net/hadeslee/archive/2007/12/31/171678.html</link><dc:creator>千里冰封</dc:creator><author>千里冰封</author><pubDate>Sun, 30 Dec 2007 23:54:00 GMT</pubDate><guid>http://www.blogjava.net/hadeslee/archive/2007/12/31/171678.html</guid><wfw:comment>http://www.blogjava.net/hadeslee/comments/171678.html</wfw:comment><comments>http://www.blogjava.net/hadeslee/archive/2007/12/31/171678.html#Feedback</comments><slash:comments>110</slash:comments><wfw:commentRss>http://www.blogjava.net/hadeslee/comments/commentRss/171678.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hadeslee/services/trackbacks/171678.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要:     YOYOPlayer1.0版推出之后,得到了一些朋友的认可和反馈,经过这段时间的修改,现在推出YOYOPlayer1.1版.相对于1.0版,改进的地方如下:&nbsp;&nbsp;<a href='http://www.blogjava.net/hadeslee/archive/2007/12/31/171678.html'>阅读全文</a><img src ="http://www.blogjava.net/hadeslee/aggbug/171678.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hadeslee/" target="_blank">千里冰封</a> 2007-12-31 07:54 <a href="http://www.blogjava.net/hadeslee/archive/2007/12/31/171678.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA版音乐播放器YOYOPlayer1.0</title><link>http://www.blogjava.net/hadeslee/archive/2007/12/17/168153.html</link><dc:creator>千里冰封</dc:creator><author>千里冰封</author><pubDate>Mon, 17 Dec 2007 02:27:00 GMT</pubDate><guid>http://www.blogjava.net/hadeslee/archive/2007/12/17/168153.html</guid><wfw:comment>http://www.blogjava.net/hadeslee/comments/168153.html</wfw:comment><comments>http://www.blogjava.net/hadeslee/archive/2007/12/17/168153.html#Feedback</comments><slash:comments>54</slash:comments><wfw:commentRss>http://www.blogjava.net/hadeslee/comments/commentRss/168153.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hadeslee/services/trackbacks/168153.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要:     从最初的写第一个简单的Netbeans音乐插件,到现在的YOYOPlayer,中间经历了一些时间.感谢我的女朋友对我的帮助,所以此播放器取名为 YOYOPlayer,因为YOYO是她的名字,这个播放器的所有界面的图片也都是她做的.她刚刚学会PS,所以界面方面可能还不太完美,但至少也是一个尝试了,欢迎大家试用,并提出宝贵意见.<br>    YOYOPlayer的主要用处还是在linux下的使用,虽然我大部份时间是在windows下面编写的,因为WINDOWS下的音乐播放软件已经很完美了,只不过用JAVA写的比较少而已,并且这个版本是完全的JAVA的版本,只要电脑装了JAVA就可以跑了,不需要再另外下载JMF的框架了,因为没有用到JMF里面的东西.在LINUX下面播放器好像都不太好用,特别是播放音乐的,要么就会出现乱码的问题,要么就会没有歌词同步的功能,而 YOYOPlayer经过我在ubuntu7.10下面的初步测试,并没有发现乱码问题,因为我默认是使用GBK的编码读取标签的,而LINUX默认的编码是UTF-8.&nbsp;&nbsp;<a href='http://www.blogjava.net/hadeslee/archive/2007/12/17/168153.html'>阅读全文</a><img src ="http://www.blogjava.net/hadeslee/aggbug/168153.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hadeslee/" target="_blank">千里冰封</a> 2007-12-17 10:27 <a href="http://www.blogjava.net/hadeslee/archive/2007/12/17/168153.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA版MP3播放器</title><link>http://www.blogjava.net/hadeslee/archive/2007/12/07/166093.html</link><dc:creator>千里冰封</dc:creator><author>千里冰封</author><pubDate>Fri, 07 Dec 2007 08:53:00 GMT</pubDate><guid>http://www.blogjava.net/hadeslee/archive/2007/12/07/166093.html</guid><wfw:comment>http://www.blogjava.net/hadeslee/comments/166093.html</wfw:comment><comments>http://www.blogjava.net/hadeslee/archive/2007/12/07/166093.html#Feedback</comments><slash:comments>16</slash:comments><wfw:commentRss>http://www.blogjava.net/hadeslee/comments/commentRss/166093.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hadeslee/services/trackbacks/166093.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 从最初写Netbeans的音乐插件,到现在写成JAVA的一个简单的音乐播放器,是在使用了插件版的之后,为了更方便与大家分享再写的,因为毕竟不是每个人都在用NB,虽然我个人很希望大家都用NB做为JAVA IDE,呵呵.运行截图如下:&nbsp;&nbsp;<a href='http://www.blogjava.net/hadeslee/archive/2007/12/07/166093.html'>阅读全文</a><img src ="http://www.blogjava.net/hadeslee/aggbug/166093.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hadeslee/" target="_blank">千里冰封</a> 2007-12-07 16:53 <a href="http://www.blogjava.net/hadeslee/archive/2007/12/07/166093.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA实现游戏编程(6)</title><link>http://www.blogjava.net/hadeslee/archive/2007/11/13/158187.html</link><dc:creator>千里冰封</dc:creator><author>千里冰封</author><pubDate>Tue, 13 Nov 2007 01:07:00 GMT</pubDate><guid>http://www.blogjava.net/hadeslee/archive/2007/11/13/158187.html</guid><wfw:comment>http://www.blogjava.net/hadeslee/comments/158187.html</wfw:comment><comments>http://www.blogjava.net/hadeslee/archive/2007/11/13/158187.html#Feedback</comments><slash:comments>100</slash:comments><wfw:commentRss>http://www.blogjava.net/hadeslee/comments/commentRss/158187.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hadeslee/services/trackbacks/158187.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 三个大类ClientView,ClientModel,ClientControl就讲到这里.登录窗口以及播放声音的实现，还有公共包面的一些共用类,以及枚举的各种实现,各位可以自行下载源代码查看，欢迎大家参与讨论。本工程是用NetBeans开发的，由于工程里面用了很多声音以及图片,所以工程比较大,有二十多M,所以上传不了,有需要的朋友,可以在下面留言,我会用Email的形式发给大家.&nbsp;&nbsp;<a href='http://www.blogjava.net/hadeslee/archive/2007/11/13/158187.html'>阅读全文</a><img src ="http://www.blogjava.net/hadeslee/aggbug/158187.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hadeslee/" target="_blank">千里冰封</a> 2007-11-13 09:07 <a href="http://www.blogjava.net/hadeslee/archive/2007/11/13/158187.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA实现游戏编程(5)</title><link>http://www.blogjava.net/hadeslee/archive/2007/11/13/158185.html</link><dc:creator>千里冰封</dc:creator><author>千里冰封</author><pubDate>Tue, 13 Nov 2007 01:06:00 GMT</pubDate><guid>http://www.blogjava.net/hadeslee/archive/2007/11/13/158185.html</guid><wfw:comment>http://www.blogjava.net/hadeslee/comments/158185.html</wfw:comment><comments>http://www.blogjava.net/hadeslee/archive/2007/11/13/158185.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hadeslee/comments/commentRss/158185.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hadeslee/services/trackbacks/158185.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 下面我们再来看看ClientControl类,这个类代码量是最多的,这个类负责整体的游戏流程和游戏逻辑,由于写这个游戏的时候并没有很好的思考,所以代码可能会比较乱:(,希望大家不要介意&nbsp;&nbsp;<a href='http://www.blogjava.net/hadeslee/archive/2007/11/13/158185.html'>阅读全文</a><img src ="http://www.blogjava.net/hadeslee/aggbug/158185.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hadeslee/" target="_blank">千里冰封</a> 2007-11-13 09:06 <a href="http://www.blogjava.net/hadeslee/archive/2007/11/13/158185.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA实现游戏编程(4)</title><link>http://www.blogjava.net/hadeslee/archive/2007/11/12/158183.html</link><dc:creator>千里冰封</dc:creator><author>千里冰封</author><pubDate>Mon, 12 Nov 2007 01:31:00 GMT</pubDate><guid>http://www.blogjava.net/hadeslee/archive/2007/11/12/158183.html</guid><wfw:comment>http://www.blogjava.net/hadeslee/comments/158183.html</wfw:comment><comments>http://www.blogjava.net/hadeslee/archive/2007/11/12/158183.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hadeslee/comments/commentRss/158183.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hadeslee/services/trackbacks/158183.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 下面我们再来看看ClientModel类,这个类负责保存游戏中的一些数据,这些数据可能需要Control类去更改然后需要由View类去呈现的,说白了,它就是一个包含有很多setter/getter的类.它的代码如下:&nbsp;&nbsp;<a href='http://www.blogjava.net/hadeslee/archive/2007/11/12/158183.html'>阅读全文</a><img src ="http://www.blogjava.net/hadeslee/aggbug/158183.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hadeslee/" target="_blank">千里冰封</a> 2007-11-12 09:31 <a href="http://www.blogjava.net/hadeslee/archive/2007/11/12/158183.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA实现游戏编程(3)  </title><link>http://www.blogjava.net/hadeslee/archive/2007/11/10/158179.html</link><dc:creator>千里冰封</dc:creator><author>千里冰封</author><pubDate>Sat, 10 Nov 2007 00:57:00 GMT</pubDate><guid>http://www.blogjava.net/hadeslee/archive/2007/11/10/158179.html</guid><wfw:comment>http://www.blogjava.net/hadeslee/comments/158179.html</wfw:comment><comments>http://www.blogjava.net/hadeslee/archive/2007/11/10/158179.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/hadeslee/comments/commentRss/158179.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hadeslee/services/trackbacks/158179.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 3.      游戏的开发与编码<br><br>在我们开发这个游戏之前，我们先讲一个这个游戏的实现所采用的方法，那就是经典的MVC模式，因为在开发游戏的时候，结构很重要，必须要理清楚每一块负责什么，每一个类负责什么，而MVC模式正好就是解决这种问题的很好的方案，我们可以把游戏的运行流程交由一个类去统一调度，游戏的呈现也就是绘图用专门一个类去负责，而绘图所需的数据可以从一个模型类里面去取，控制的类负责更改模型里面的数据并调用视图类去更新当前的视频，这样整个游戏的流程就很清晰明了。所以我们设计了如下几个类，它们之间互相交互，形成整个游戏的框架。<br>&nbsp;&nbsp;<a href='http://www.blogjava.net/hadeslee/archive/2007/11/10/158179.html'>阅读全文</a><img src ="http://www.blogjava.net/hadeslee/aggbug/158179.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hadeslee/" target="_blank">千里冰封</a> 2007-11-10 08:57 <a href="http://www.blogjava.net/hadeslee/archive/2007/11/10/158179.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA实现游戏编程(2)</title><link>http://www.blogjava.net/hadeslee/archive/2007/11/09/158175.html</link><dc:creator>千里冰封</dc:creator><author>千里冰封</author><pubDate>Fri, 09 Nov 2007 01:11:00 GMT</pubDate><guid>http://www.blogjava.net/hadeslee/archive/2007/11/09/158175.html</guid><wfw:comment>http://www.blogjava.net/hadeslee/comments/158175.html</wfw:comment><comments>http://www.blogjava.net/hadeslee/archive/2007/11/09/158175.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/hadeslee/comments/commentRss/158175.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hadeslee/services/trackbacks/158175.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1.      JAVA2D简介<br><br>SUN的API对JAVA2D的描述是这样的：<br><br>Java 2D API（Application Programming Interface，应用程序接口）是一套用于高级图形和图像处理的类。它将艺术线条、文本和图像囊括在一个综合模型中。该 API 提供了对图像复合和 alpha 通道图像的广泛支持，同时也提供了一套进行精确颜色空间定义和转换的类，以及大量面向显示的图像操作符。这些类以 java.awt 和 java.awt.image 包附件的形式提供（而不是单独的包）。&nbsp;&nbsp;<a href='http://www.blogjava.net/hadeslee/archive/2007/11/09/158175.html'>阅读全文</a><img src ="http://www.blogjava.net/hadeslee/aggbug/158175.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hadeslee/" target="_blank">千里冰封</a> 2007-11-09 09:11 <a href="http://www.blogjava.net/hadeslee/archive/2007/11/09/158175.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA实现游戏编程(1)</title><link>http://www.blogjava.net/hadeslee/archive/2007/11/09/158170.html</link><dc:creator>千里冰封</dc:creator><author>千里冰封</author><pubDate>Fri, 09 Nov 2007 01:10:00 GMT</pubDate><guid>http://www.blogjava.net/hadeslee/archive/2007/11/09/158170.html</guid><wfw:comment>http://www.blogjava.net/hadeslee/comments/158170.html</wfw:comment><comments>http://www.blogjava.net/hadeslee/archive/2007/11/09/158170.html#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://www.blogjava.net/hadeslee/comments/commentRss/158170.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hadeslee/services/trackbacks/158170.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要:     一提起JAVA,可能大多数人都会想起如下几个词汇。运行慢，解释执行，绝对不适合桌面开发。更不要说开发游戏了。其实这些都是对JAVA的偏见，JAVA刚出来的时候你这样说还是可以的，但是现在的JAVA已经是今非昔比了。&nbsp;&nbsp;<a href='http://www.blogjava.net/hadeslee/archive/2007/11/09/158170.html'>阅读全文</a><img src ="http://www.blogjava.net/hadeslee/aggbug/158170.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hadeslee/" target="_blank">千里冰封</a> 2007-11-09 09:10 <a href="http://www.blogjava.net/hadeslee/archive/2007/11/09/158170.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA版文件MD5生成器</title><link>http://www.blogjava.net/hadeslee/archive/2007/11/08/159018.html</link><dc:creator>千里冰封</dc:creator><author>千里冰封</author><pubDate>Thu, 08 Nov 2007 02:11:00 GMT</pubDate><guid>http://www.blogjava.net/hadeslee/archive/2007/11/08/159018.html</guid><wfw:comment>http://www.blogjava.net/hadeslee/comments/159018.html</wfw:comment><comments>http://www.blogjava.net/hadeslee/archive/2007/11/08/159018.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/hadeslee/comments/commentRss/159018.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hadeslee/services/trackbacks/159018.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 做文件传输的时候,为了保证文件是合法的有效的,经常会对文件做MD5校验,以确保和原始的文件是一样的.并且做断点续传的时候这一点也是挺重要的,其实 JAVA处理这方面也挺不错的,可是我搜了半天,也没有搜到一个用JAVA写的文件MD5生成程序,有的也只是命令行模式下的,没有一个GUI模式的,所以就写了一个GUI的,方便使用,只用了两个类,一个是工具类,除了生成MD5外还可以生成SHA码,大家可以通过改源文件达到这一点,并且文件支持拖放,可以把要生成的文件拖到文本区,就可以显示这个文件的信息了.&nbsp;&nbsp;<a href='http://www.blogjava.net/hadeslee/archive/2007/11/08/159018.html'>阅读全文</a><img src ="http://www.blogjava.net/hadeslee/aggbug/159018.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hadeslee/" target="_blank">千里冰封</a> 2007-11-08 10:11 <a href="http://www.blogjava.net/hadeslee/archive/2007/11/08/159018.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>NIO连接socket</title><link>http://www.blogjava.net/hadeslee/archive/2007/11/05/158205.html</link><dc:creator>千里冰封</dc:creator><author>千里冰封</author><pubDate>Mon, 05 Nov 2007 02:50:00 GMT</pubDate><guid>http://www.blogjava.net/hadeslee/archive/2007/11/05/158205.html</guid><wfw:comment>http://www.blogjava.net/hadeslee/comments/158205.html</wfw:comment><comments>http://www.blogjava.net/hadeslee/archive/2007/11/05/158205.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/hadeslee/comments/commentRss/158205.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hadeslee/services/trackbacks/158205.html</trackback:ping><description><![CDATA[早就听说JAVA的NIO比IO牛一些,可是牛在哪里一直都不知道,并且NIO比IO难学,搞了半天终于用NIO弄了两个程序,一个是服务器端,一个是客户端,都是用NIO连接的,代码如下,注释比较少,输出比较多:)<br />
<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008000;">/*</span><span style="color: #008000;"><br />
&nbsp;*&nbsp;To&nbsp;change&nbsp;this&nbsp;template,&nbsp;choose&nbsp;Tools&nbsp;|&nbsp;Templates<br />
&nbsp;*&nbsp;and&nbsp;open&nbsp;the&nbsp;template&nbsp;in&nbsp;the&nbsp;editor.<br />
&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">package</span><span style="color: #000000;">&nbsp;testnio;<br />
<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.net.InetSocketAddress;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.nio.ByteBuffer;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.nio.channels.SelectionKey;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.nio.channels.Selector;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.nio.channels.ServerSocketChannel;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.nio.channels.SocketChannel;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.util.Set;<br />
<br />
</span><span style="color: #008000;">/**</span><span style="color: #008000;"><br />
&nbsp;*<br />
&nbsp;*&nbsp;</span><span style="color: #808080;">@author</span><span style="color: #008000;">&nbsp;hadeslee<br />
&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;Receive&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span style="color: #0000ff;">throws</span><span style="color: #000000;">&nbsp;Exception&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">boolean</span><span style="color: #000000;">&nbsp;b&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">true</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ByteBuffer&nbsp;buffer&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;ByteBuffer.allocate(</span><span style="color: #000000;">1024</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServerSocketChannel&nbsp;ss&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;ServerSocketChannel.open();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ss.socket().bind(</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;InetSocketAddress(</span><span style="color: #000000;">8888</span><span style="color: #000000;">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ss.configureBlocking(</span><span style="color: #0000ff;">false</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Selector&nbsp;se&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Selector.open();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ss.register(se,&nbsp;SelectionKey.OP_ACCEPT);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">&nbsp;(se.select()&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">SelectionKey</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;set&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;se.selectedKeys();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">进入一个循环,大小是:</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;set.size());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(SelectionKey&nbsp;key&nbsp;:&nbsp;set)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;ops&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;key.readyOps();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">ops=</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;ops);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;((ops&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;SelectionKey.OP_ACCEPT)&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;SelectionKey.OP_ACCEPT)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SocketChannel&nbsp;sc&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;ss.accept();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.err.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">有新的连接了<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;sc);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.err.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">地址是:</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;sc.socket());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sc.configureBlocking(</span><span style="color: #0000ff;">false</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sc.register(se,&nbsp;SelectionKey.OP_READ);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;((ops&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;SelectionKey.OP_READ)&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;SelectionKey.OP_READ)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.err.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">有新的读取</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SocketChannel&nbsp;sc&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(SocketChannel)&nbsp;key.channel();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(sc.isConnected());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sc.read(buffer);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buffer.flip();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">System.out.println(new&nbsp;String(buffer.array()));</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(</span><span style="color: #000000;">5000</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(b)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">false</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sc.write(buffer);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set.clear();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">退出循环</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
</span></div>
<br />
客户端:<br />
<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008000;">/*</span><span style="color: #008000;"><br />
&nbsp;*&nbsp;To&nbsp;change&nbsp;this&nbsp;template,&nbsp;choose&nbsp;Tools&nbsp;|&nbsp;Templates<br />
&nbsp;*&nbsp;and&nbsp;open&nbsp;the&nbsp;template&nbsp;in&nbsp;the&nbsp;editor.<br />
&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">package</span><span style="color: #000000;">&nbsp;testnio;<br />
<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.net.InetSocketAddress;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.nio.ByteBuffer;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.nio.channels.SelectionKey;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.nio.channels.Selector;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.nio.channels.SocketChannel;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.util.Set;<br />
<br />
</span><span style="color: #008000;">/**</span><span style="color: #008000;"><br />
&nbsp;*<br />
&nbsp;*&nbsp;</span><span style="color: #808080;">@author</span><span style="color: #008000;">&nbsp;hadeslee<br />
&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;Send&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span style="color: #0000ff;">throws</span><span style="color: #000000;">&nbsp;Exception&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SocketChannel&nbsp;sc&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;SocketChannel.open();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ByteBuffer&nbsp;buffer&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;ByteBuffer.allocate(</span><span style="color: #000000;">1024</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Selector&nbsp;se&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Selector.open();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buffer.put(</span><span style="color: #000000;">"</span><span style="color: #000000;">我是中国人,我爱我的祖国,hadeslee</span><span style="color: #000000;">"</span><span style="color: #000000;">.getBytes());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buffer.flip();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sc.configureBlocking(</span><span style="color: #0000ff;">false</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sc.register(se,&nbsp;SelectionKey.OP_CONNECT&nbsp;</span><span style="color: #000000;">|</span><span style="color: #000000;">&nbsp;SelectionKey.OP_READ&nbsp;</span><span style="color: #000000;">|</span><span style="color: #000000;">&nbsp;SelectionKey.OP_WRITE);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sc.connect(</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;InetSocketAddress(</span><span style="color: #000000;">"</span><span style="color: #000000;">192.168.1.58</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">8888</span><span style="color: #000000;">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">(</span><span style="color: #000000;">!</span><span style="color: #000000;">sc.finishConnect());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sc.write(buffer);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">进入循环</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(</span><span style="color: #000000;">10000</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;sum&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;se.select();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">&nbsp;(se.select()&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(</span><span style="color: #000000;">100</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">终于大于0了</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">SelectionKey</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;set&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;se.selectedKeys();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">大小是:</span><span style="color: #000000;">"</span><span style="color: #000000;">+</span><span style="color: #000000;">set.size());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(SelectionKey&nbsp;key&nbsp;:&nbsp;set)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;ops&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;key.readyOps();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;((ops&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;SelectionKey.OP_CONNECT)&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;SelectionKey.OP_CONNECT)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sc.write(buffer);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">连接成功</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;((ops&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;SelectionKey.OP_READ)&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;SelectionKey.OP_READ)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;收到东西</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sc.read(buffer);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buffer.flip();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">收到的是:</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;String(buffer.array(),</span><span style="color: #000000;">0</span><span style="color: #000000;">,buffer.limit()));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sc.write(buffer);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;se.selectedKeys().clear();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;ByteBuffer[]&nbsp;get(String<img src="http://www.blogjava.net/Images/dot.gif"  alt="" />&nbsp;heads)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ByteBuffer[]&nbsp;bbs&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;ByteBuffer[heads.length];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;bbs.length;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;s&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;heads[i];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bbs[i]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;ByteBuffer.allocateDirect(</span><span style="color: #000000;">1024</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bbs[i].put(s.getBytes());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bbs[i].flip();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;bbs;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
</span></div>
有机会再好好研究它们之间的更加具体的用法,以上的只是一个简单的,能互连的一个例子.<br />
<br />
<img src ="http://www.blogjava.net/hadeslee/aggbug/158205.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hadeslee/" target="_blank">千里冰封</a> 2007-11-05 10:50 <a href="http://www.blogjava.net/hadeslee/archive/2007/11/05/158205.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>构建跨平台的JNI实现(下)</title><link>http://www.blogjava.net/hadeslee/archive/2007/10/20/154440.html</link><dc:creator>千里冰封</dc:creator><author>千里冰封</author><pubDate>Sat, 20 Oct 2007 02:09:00 GMT</pubDate><guid>http://www.blogjava.net/hadeslee/archive/2007/10/20/154440.html</guid><wfw:comment>http://www.blogjava.net/hadeslee/comments/154440.html</wfw:comment><comments>http://www.blogjava.net/hadeslee/archive/2007/10/20/154440.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/hadeslee/comments/commentRss/154440.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hadeslee/services/trackbacks/154440.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 昨天我们讲了要开发JNI的几个工具的安装和下载,今天我们讲它们的基本使用.为了验证我们昨天的PATH确实设好了.我们可以进入CMD下面,输入如下语句:gcc --version<br>如果输出类似如下的话,就说明安装正确了:<br><br>gcc (GCC) 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)<br>Copyright (C) 2004 Free Software Foundation, Inc.<br>This is free software; see the source for copying conditions.  There is NO<br>warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.&nbsp;&nbsp;<a href='http://www.blogjava.net/hadeslee/archive/2007/10/20/154440.html'>阅读全文</a><img src ="http://www.blogjava.net/hadeslee/aggbug/154440.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hadeslee/" target="_blank">千里冰封</a> 2007-10-20 10:09 <a href="http://www.blogjava.net/hadeslee/archive/2007/10/20/154440.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>构建跨平台的JNI实现(上)</title><link>http://www.blogjava.net/hadeslee/archive/2007/10/19/154335.html</link><dc:creator>千里冰封</dc:creator><author>千里冰封</author><pubDate>Fri, 19 Oct 2007 11:55:00 GMT</pubDate><guid>http://www.blogjava.net/hadeslee/archive/2007/10/19/154335.html</guid><wfw:comment>http://www.blogjava.net/hadeslee/comments/154335.html</wfw:comment><comments>http://www.blogjava.net/hadeslee/archive/2007/10/19/154335.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/hadeslee/comments/commentRss/154335.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hadeslee/services/trackbacks/154335.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 我们在开发JAVA应用的时候,有时会遇到一些JAVA所不能解决的问题,对此我们有两种解决方法,一是用本地方法JNI,二就是exec一个进程来帮我们做事,一般来说exce一个进程是非常不跨平台的行为,而JNI而是不得已而为之的事情.因为如果你想为JNI跨平台的话,你必须得提供几个平台的代码本地实现.下面我们就利用Netbeans的C/C++开发工具,以及cygwin库来实现多平台的JNI实现.&nbsp;&nbsp;<a href='http://www.blogjava.net/hadeslee/archive/2007/10/19/154335.html'>阅读全文</a><img src ="http://www.blogjava.net/hadeslee/aggbug/154335.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hadeslee/" target="_blank">千里冰封</a> 2007-10-19 19:55 <a href="http://www.blogjava.net/hadeslee/archive/2007/10/19/154335.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>网页源文件查看器</title><link>http://www.blogjava.net/hadeslee/archive/2007/09/28/148806.html</link><dc:creator>千里冰封</dc:creator><author>千里冰封</author><pubDate>Fri, 28 Sep 2007 03:33:00 GMT</pubDate><guid>http://www.blogjava.net/hadeslee/archive/2007/09/28/148806.html</guid><wfw:comment>http://www.blogjava.net/hadeslee/comments/148806.html</wfw:comment><comments>http://www.blogjava.net/hadeslee/archive/2007/09/28/148806.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.blogjava.net/hadeslee/comments/commentRss/148806.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hadeslee/services/trackbacks/148806.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 有些网页是屏蔽了鼠标右键的,不让我们查看它的源代码或者不让我们点击鼠标右键,在此我们可以写一个程序,让它获得这个网页的流,然后我们不就什么都能看到了吗?此程序就是这样写的,先获得网页的输入流,然后得到这个输入流的一些参数,比如这个流的长度,这个流所使用的编码.然后根据这些参数来进行获取,并根据不同的情况提供不同的进度条,比如有些网页它的长度返回的是-1,这个时候就用一个无状态的进度条来表示,如果长度大于0的话,那就用可以实时显示目前读取网页的进度.正好借这个机会又把swing复习了一下.呵呵.<br>&nbsp;&nbsp;<a href='http://www.blogjava.net/hadeslee/archive/2007/09/28/148806.html'>阅读全文</a><img src ="http://www.blogjava.net/hadeslee/aggbug/148806.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hadeslee/" target="_blank">千里冰封</a> 2007-09-28 11:33 <a href="http://www.blogjava.net/hadeslee/archive/2007/09/28/148806.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数字验证码的识别</title><link>http://www.blogjava.net/hadeslee/archive/2007/09/28/148814.html</link><dc:creator>千里冰封</dc:creator><author>千里冰封</author><pubDate>Fri, 28 Sep 2007 01:02:00 GMT</pubDate><guid>http://www.blogjava.net/hadeslee/archive/2007/09/28/148814.html</guid><wfw:comment>http://www.blogjava.net/hadeslee/comments/148814.html</wfw:comment><comments>http://www.blogjava.net/hadeslee/archive/2007/09/28/148814.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/hadeslee/comments/commentRss/148814.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hadeslee/services/trackbacks/148814.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 数字验证码很多地方都会用到,我前段时间也写过一篇有关于生成验证码的文章,那是随机生成大小不一,颜色不一,形状不一的数字图片,本文主要是针对那些比较规范的验证码的识别,何谓规范?规范就是数字的大小几乎一致,颜色对比度挺高,没什么干扰线.识别的依据就是最最最基础的办法,比对,先取样,保存成字模,再用字模去和将要识别的图片进行比较,取最接近的那个结果.不过在比较之前必须得到图片里面的数据提取出来并适当地去除一些干扰.<br><br>下面就是识别部份的代码:&nbsp;&nbsp;<a href='http://www.blogjava.net/hadeslee/archive/2007/09/28/148814.html'>阅读全文</a><img src ="http://www.blogjava.net/hadeslee/aggbug/148814.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hadeslee/" target="_blank">千里冰封</a> 2007-09-28 09:02 <a href="http://www.blogjava.net/hadeslee/archive/2007/09/28/148814.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用ProcessBuilder实现JAVA程序的重启</title><link>http://www.blogjava.net/hadeslee/archive/2007/09/27/148616.html</link><dc:creator>千里冰封</dc:creator><author>千里冰封</author><pubDate>Thu, 27 Sep 2007 03:55:00 GMT</pubDate><guid>http://www.blogjava.net/hadeslee/archive/2007/09/27/148616.html</guid><wfw:comment>http://www.blogjava.net/hadeslee/comments/148616.html</wfw:comment><comments>http://www.blogjava.net/hadeslee/archive/2007/09/27/148616.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/hadeslee/comments/commentRss/148616.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hadeslee/services/trackbacks/148616.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在程序运行的过程中,我们可能需要更改一些配置,如果配置更改得很大的话,就可能会需要程序重新启动,但是JAVA并没有提供给我们直接的可以重启的方法.在这里我们将利用JDK1.5新增的ProcessBuilder来创建一个重启进程,然后自己的进程退出.&nbsp;&nbsp;<a href='http://www.blogjava.net/hadeslee/archive/2007/09/27/148616.html'>阅读全文</a><img src ="http://www.blogjava.net/hadeslee/aggbug/148616.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hadeslee/" target="_blank">千里冰封</a> 2007-09-27 11:55 <a href="http://www.blogjava.net/hadeslee/archive/2007/09/27/148616.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA得到网卡物理地址(windows和Linux)</title><link>http://www.blogjava.net/hadeslee/archive/2007/09/27/148504.html</link><dc:creator>千里冰封</dc:creator><author>千里冰封</author><pubDate>Thu, 27 Sep 2007 01:22:00 GMT</pubDate><guid>http://www.blogjava.net/hadeslee/archive/2007/09/27/148504.html</guid><wfw:comment>http://www.blogjava.net/hadeslee/comments/148504.html</wfw:comment><comments>http://www.blogjava.net/hadeslee/archive/2007/09/27/148504.html#Feedback</comments><slash:comments>15</slash:comments><wfw:commentRss>http://www.blogjava.net/hadeslee/comments/commentRss/148504.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hadeslee/services/trackbacks/148504.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在我们在写程序的过程中,有些时候需要知道一些电脑的硬件信息,比如我们写一些需要注册的程序的时候,就需要得到某个电脑特定的信息,一般来说,网卡的物理地址是不会重复的,我们正好可以用它来做为我们识别一台电脑的标志.那如何得到网卡的物理地址呢?我们可以借助于ProcessBuilder这个类,这个类是JDK1.5新加的,以前也可以用Runtime.exce这个类.在此我们将演示一下如何在Windows和Linux环境下得到网卡的物理地址.&nbsp;&nbsp;<a href='http://www.blogjava.net/hadeslee/archive/2007/09/27/148504.html'>阅读全文</a><img src ="http://www.blogjava.net/hadeslee/aggbug/148504.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hadeslee/" target="_blank">千里冰封</a> 2007-09-27 09:22 <a href="http://www.blogjava.net/hadeslee/archive/2007/09/27/148504.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>