﻿<?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-流浪的蜗牛-文章分类-JavaEE</title><link>http://www.blogjava.net/vagasnail/category/42602.html</link><description>读历史、看小说、写程序都是我所爱。</description><language>zh-cn</language><lastBuildDate>Fri, 06 Nov 2009 19:39:23 GMT</lastBuildDate><pubDate>Fri, 06 Nov 2009 19:39:23 GMT</pubDate><ttl>60</ttl><item><title>JNI学习记录</title><link>http://www.blogjava.net/vagasnail/articles/301124.html</link><dc:creator>vagasnail</dc:creator><author>vagasnail</author><pubDate>Wed, 04 Nov 2009 10:44:00 GMT</pubDate><guid>http://www.blogjava.net/vagasnail/articles/301124.html</guid><wfw:comment>http://www.blogjava.net/vagasnail/comments/301124.html</wfw:comment><comments>http://www.blogjava.net/vagasnail/articles/301124.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/vagasnail/comments/commentRss/301124.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/vagasnail/services/trackbacks/301124.html</trackback:ping><description><![CDATA[  
<p style="MARGIN-LEFT: 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt"><span style="FONT-SIZE: 10pt">1．<span style="FONT: 7pt 'Times New Roman'">     </span></span><span style="FONT-SIZE: 10pt">JNI</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">是</span><span style="FONT-SIZE: 10pt">Java</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">与本地</span><span style="FONT-SIZE: 10pt">C/C++</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">代码相互操作的一种方案。</span></p><p style="MARGIN-LEFT: 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt"><span style="FONT-SIZE: 10pt">2．<span style="FONT: 7pt 'Times New Roman'">     </span></span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">要使用</span><span style="FONT-SIZE: 10pt">JNI</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">，需要：</span></p><p style="MARGIN-LEFT: 21pt"><span style="FONT-SIZE: 10pt">1)</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">，在</span><span style="FONT-SIZE: 10pt">Java</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">源程序中使用</span><span style="FONT-SIZE: 10pt">native</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">关键字声明一个方法。</span></p><p style="MARGIN-LEFT: 21pt"><span style="FONT-SIZE: 10pt">         </span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">如：</span><span style="FONT-SIZE: 10pt">public native void callCppFunction();</span></p><p style="MARGIN-LEFT: 21pt"><span style="FONT-SIZE: 10pt">2</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">），然后在命令行提示符下使用</span><span style="FONT-SIZE: 10pt">javah</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">这个命令来生成关于</span><span style="FONT-SIZE: 10pt">JNI</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">的本地头文件。</span></p><p style="MARGIN-LEFT: 21pt; TEXT-INDENT: 21pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">如：</span><span style="FONT-SIZE: 10pt">javah test.jni.MainArrayTest</span></p><p><span style="FONT-SIZE: 10pt">         3</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">），在</span><span style="FONT-SIZE: 10pt">VC Studio</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">中建立一个</span><span style="FONT-SIZE: 10pt">DLL</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">工程，拷贝这个头文件到该工程目录下，拷贝</span></p><p style="MARGIN-LEFT: 21pt"><span style="FONT-SIZE: 10pt">         %JAVA_HOME%"include</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">下面的</span><span style="FONT-SIZE: 10pt">jni.h</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">、</span><span style="FONT-SIZE: 10pt">jni_md.h</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">到工程目录下，或者加到系统目下，具体需要拷贝的头文件还要具体研究。</span></p><p style="MARGIN-LEFT: 21pt"><span style="FONT-SIZE: 10pt">4</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">），建一个</span><span style="FONT-SIZE: 10pt">cpp</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">源文件，实现生成的头文件中声明的函数。</span></p><p style="MARGIN-LEFT: 21pt"><span style="FONT-SIZE: 10pt">5</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">），具体各种函数及数据类型的使用如下：具体自己研究：</span></p><p style="MARGIN-LEFT: 60pt; TEXT-INDENT: -18pt; tab-stops: list 60.0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: Wingdings">l<span style="FONT: 7pt 'Times New Roman'">       </span></span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">简单方法调用，基本数据类型的使用</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">jclass clazz_TestNative = env-&gt;GetObjectClass(obj);</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">/*       </span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">jfieldID id_number = env-&gt;GetFieldID(clazz_TestNative,</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">           "number", "I");</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">jint number = env-&gt;GetIntField(obj, id_number);</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">cout&lt;&lt;number&lt;&lt;endl;</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">env-&gt;SetIntField(obj, id_number, 1000L);</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">*/</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">//        jmethodID id_max = env-&gt;GetMethodID(clazz_TestNative, "max", "(DD)D");</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">//        jdouble maxValue = env-&gt;CallDoubleMethod(obj, id_max, 3.14, 3.15);</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">//        cout&lt;&lt;maxValue&lt;&lt;endl;</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">jfieldID id_person = env-&gt;GetFieldID(clazz_TestNative, "person", "Ltest/jni/Father;");</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">jobject person = env-&gt;GetObjectField(obj, id_person);</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">jclass clazz_Father = env-&gt;FindClass("test/jni/Father");</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">jmethodID id_Father_Function = env-&gt;GetMethodID(clazz_Father, "function", "()V");</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">env-&gt;CallVoidMethod(person, id_Father_Function);</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">env-&gt;CallNonvirtualObjectMethod(person,clazz_Father, id_Father_Function);</span></p><p style="MARGIN-LEFT: 60pt; TEXT-INDENT: -18pt; tab-stops: list 60.0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: Wingdings">l<span style="FONT: 7pt 'Times New Roman'">       </span></span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">对象的使用</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">jclass clazz_date = env-&gt;FindClass("java/util/Date");</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">jmethodID outputDate_ID = env-&gt;GetMethodID(clazz_date, "&lt;init&gt;", "()V");</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">jobject date_obj = env-&gt;NewObject(clazz_date, outputDate_ID);</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">jmethodID mid_date_getTime = env-&gt;GetMethodID(clazz_date, "getTime", "()J");</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">unsigned times = env-&gt;CallLongMethod(date_obj, mid_date_getTime);</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">//        printf("%u",times);</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">cout&lt;&lt;times&lt;&lt;endl;</span></p><p style="MARGIN-LEFT: 60pt; TEXT-INDENT: -18pt; tab-stops: list 60.0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: Wingdings">l<span style="FONT: 7pt 'Times New Roman'">       </span></span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">字符串的简单实用</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">jfieldID fid_msg = env-&gt;GetFieldID(env-&gt;GetObjectClass(obj), "message", "Ljava/lang/String;");</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">jstring j_msg = (jstring)env-&gt;GetObjectField(obj, fid_msg);</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">//const jchar *p_jst = env-&gt;GetStringChars(j_msg, NULL);</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">//MessageBoxW(NULL,(const wchar_t *)p_jst, L"Title", MB_OK);</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">jint len = env-&gt;GetStringLength(j_msg);</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">jchar *j_buf = new jchar[len+1];</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">j_buf[len] = L'"0';</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">env-&gt;GetStringRegion(j_msg, 0, len, j_buf);       </span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">wstring wstr((const wchar_t *)j_buf);</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">//env-&gt;ReleaseStringChars(j_msg, j_buf);//</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">不能释放字符数组啊</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">delete []j_buf;</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">std::reverse(wstr.begin(), wstr.end());</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">jstring jnewStr = env-&gt;NewString((const jchar*)wstr.c_str(), wstr.size()); </span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">env-&gt;SetObjectField(obj, fid_msg, jnewStr);</span></p><p><span style="FONT-SIZE: 10pt">                   </span></p><p style="MARGIN-LEFT: 60pt; TEXT-INDENT: -18pt; tab-stops: list 60.0pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: Wingdings">l<span style="FONT: 7pt 'Times New Roman'">       </span></span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">数组的使用</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">jfieldID fid_arrays = env-&gt;GetFieldID(env-&gt;GetObjectClass(obj), "arrays", "[I");</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">jintArray jint_arr = (jintArray)env-&gt;GetObjectField(obj, fid_arrays);</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">jint *int_arr = env-&gt;GetIntArrayElements(jint_arr, NULL);</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">jsize len = env-&gt;GetArrayLength(jint_arr);</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">for(int i = 0; i &lt; len; ++i)</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">{</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">//       cout&lt;&lt;int_arr[i]&lt;&lt;endl;</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">}</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">sort(int_arr, int_arr + len, less_second);</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">env-&gt;ReleaseIntArrayElements(jint_arr, int_arr, /*JNI_ABORT/JNI_COMMIT/0*/0);</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">}</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">bool less_second(const int &amp; m1, const int &amp; m2)</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">{</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">        return m1 &gt; m2;</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">}</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">上面要注意在</span><span style="FONT-SIZE: 10pt">JNI</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">中对</span><span style="FONT-SIZE: 10pt">Java</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">中数据类型的映射，见头文件的声明。</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">还有注意</span><span style="FONT-SIZE: 10pt">Java</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">中关于对象类型的表示方法比如：</span><span style="FONT-SIZE: 10pt">int I, boolean Z,</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt">Object L&lt;</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">类的完整名称，注意包名以</span><span style="FONT-SIZE: 10pt">/</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">分隔</span><span style="FONT-SIZE: 10pt">&gt;;</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">，数组</span><span style="FONT-SIZE: 10pt">[&lt;</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">数据类型</span><span style="FONT-SIZE: 10pt">&gt;</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">。</span></p><p style="MARGIN-LEFT: 60pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">如果不知道可以使用</span><span style="FONT-SIZE: 10pt">javap</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">这个反编译器。</span></p><p><span style="FONT-SIZE: 10pt">         </span></p><p><span style="FONT-SIZE: 10pt">         6</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">）、更多资料，将</span><span style="FONT-SIZE: 10pt">Java</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">手册。</span></p><p><span style="FONT-SIZE: 10pt">         7</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">）、编译，生成</span><span style="FONT-SIZE: 10pt">DLL</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">。将</span><span style="FONT-SIZE: 10pt">DLL</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">的文件路径加到</span><span style="FONT-SIZE: 10pt">Path</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">环境变量下：</span></p><p><span style="FONT-SIZE: 10pt">         8</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">）、在</span><span style="FONT-SIZE: 10pt">Main</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">函数中加载动态库。</span></p><p style="MARGIN-LEFT: 47.05pt"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">如：</span><span style="FONT-SIZE: 10pt; COLOR: black">System.<em>loadLibrary</em>(</span><span style="FONT-SIZE: 10pt; COLOR: #2a00ff">"TestNative4"</span><span style="FONT-SIZE: 10pt; COLOR: black">)</span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体">，注意不要</span><span style="FONT-SIZE: 10pt; COLOR: black">DLL</span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体">扩展名，为了跨平台嘛！</span></p><p style="MARGIN-LEFT: 46pt; TEXT-INDENT: -25pt"><span style="FONT-SIZE: 10pt; COLOR: black">9</span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体">）、如果使用的是</span><span style="FONT-SIZE: 10pt; COLOR: black">eclipse</span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体">之类的</span><span style="FONT-SIZE: 10pt; COLOR: black">IDE</span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体">工具，请重启，因为该类工具在启动时，默认读取了系统变量，但是不会监视变量的变化。</span></p><p style="MARGIN-LEFT: 46pt; TEXT-INDENT: -25pt"><span style="FONT-SIZE: 10pt; COLOR: black">10</span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体">）、注意在</span><span style="FONT-SIZE: 10pt; COLOR: black">JNI</span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体">中对</span><span style="FONT-SIZE: 10pt; COLOR: black">Java</span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体">对象的引用。不然垃圾回收将会产生问题。注意全局引用，局部引用、弱全局引用的使用。</span></p><p style="MARGIN-LEFT: 46pt; TEXT-INDENT: -25pt"><span style="FONT-SIZE: 10pt; COLOR: black">           </span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体">局部引用，也就是本地方法中返回引用。应该使用</span><span style="FONT-SIZE: 10pt; COLOR: black">DeleteLocalRef</span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体">释放该引用。</span><span style="FONT-SIZE: 10pt; COLOR: black">NewLocalRef</span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体">创建。还用很多方式创建。</span></p><p style="MARGIN-LEFT: 46pt; TEXT-INDENT: -25pt"><span style="FONT-SIZE: 10pt; COLOR: black">           </span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体">全局引用，需要手动释放，防止垃圾回收器回收。需要使用</span><span style="FONT-SIZE: 10pt; COLOR: black">NewGlobalRef</span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体">函数创建，释放它需要使用</span><span style="FONT-SIZE: 10pt; COLOR: black">DeleteGlobalRef</span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体">函数。</span></p><p style="MARGIN-LEFT: 46pt; TEXT-INDENT: -25pt"><span style="FONT-SIZE: 10pt; COLOR: black">           </span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体">弱全局引用，需要编程人员手动释放，但是它不防止垃圾回收器的回收。</span></p><p style="MARGIN-LEFT: 46pt; TEXT-INDENT: -25pt"><span style="FONT-SIZE: 10pt; COLOR: black">           </span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体">使用</span><span style="FONT-SIZE: 10pt; COLOR: black">NewWeakGlobalRef</span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体">创建，使用</span><span style="FONT-SIZE: 10pt; COLOR: black">DeleteWeakGlobalref</span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体">释放。</span><span style="FONT-SIZE: 10pt; COLOR: black">IsSamObject(jobject obj1, jobject obj2)</span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体">判断弱全局引用指向的对象是否已被回收。</span></p><img src ="http://www.blogjava.net/vagasnail/aggbug/301124.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/vagasnail/" target="_blank">vagasnail</a> 2009-11-04 18:44 <a href="http://www.blogjava.net/vagasnail/articles/301124.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>