<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Voland.com.cn</title>
	<atom:link href="http://www.voland.com.cn/feed" rel="self" type="application/rss+xml" />
	<link>http://www.voland.com.cn</link>
	<description>人生百年,诸事记之</description>
	<lastBuildDate>Wed, 02 May 2012 03:20:02 +0000</lastBuildDate>
	<language>zh</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>也谈国是</title>
		<link>http://www.voland.com.cn/on-the-country-is</link>
		<comments>http://www.voland.com.cn/on-the-country-is#comments</comments>
		<pubDate>Wed, 02 May 2012 03:06:14 +0000</pubDate>
		<dc:creator>Nortan</dc:creator>
				<category><![CDATA[人生百味]]></category>
		<category><![CDATA[国是]]></category>
		<category><![CDATA[担忧]]></category>

		<guid isPermaLink="false">http://www.voland.com.cn/?p=765</guid>
		<description><![CDATA[昨天看了新闻,大概的意思就是一座老夫子庙,因为修水库,把他永远的埋在了水下,现在需要花了大量的人力物力,到水下勘探,看看原来他是长什嘛样子,为现在整体原样重建做参考.修建孔庙是功高德颂的事情,他不仅能表示我们还是在沐浴儒家思想下,还能为国家挣点旅游门票费,公众更是多了一个休闲的好去处,应该修建. 同样还是新闻,泰国人入境枪杀中国公民,注意是泰国军人持枪入我境枪杀我国公民,还有中国渔船在中国的海域上进行捕鱼活动被韩国军警人船扣押,更有南沙群岛500多个中国海岛,被它国所占,他们还向国际上诉苦,说中国以大国这位,欺负他们小国!!! 新闻还是新闻!计划生育社会抚养费去向成谜,年规模或超200亿,计划生育?社会抚养费?这些个搞笑的名词,成了人类历史上最大的悲哀,而且社会抚养费还去向成谜? 作为良民,我想理论上是可以谈谈国是的,必竞我们还在红旗下,还是新中国, 还是社会主义国家,还是人民当家作主.所以我还是想谈谈我的想法,一个中国良民的想法,一个还能分清青红皂白,还能区别轻重缓急的正常中国良民的想法.我们的国家,在经济上,近几年发生了翻天覆地的变化,人民的生活日益好转,但同时,国内社会风气败坏,官寮腐败成风,人们信仰迷失,政治斗争预演预烈,为了权力,为了经济利益,政府与政府之间,政府与人民,人民与人民之间,相互勾心斗角,相互尔虞我诈;而国外,则以美国为首的西方国家,从经济,政治,军事等方便对中国进行包抄.大力宣讲中国威胁论,煽动中国周边国家向中国挑动事端,占领中国领土&#8230;&#8230;这一切的一切,可谓是内忧外患.我认为国家当务之急,应该对内严惩腐败,整治社会风气,维护社会稳定,重新树产人们的生活及价值观,大力发展农业,大力发展科技,教育,大力发展军事,特别是加大发展海军,空军力度,提高其实际作战能力,适当降低经济增长预期,加强对边疆资源的开发利用及防守,承认并改正所谓的计划生育错误政策,少提有关部门,少说有人,认真处理社会矛盾及事故;对外则团结”有关”力量,加大在国际上的声音,加强在国际上的存在,坚决打击一切入侵行为,保障,保护国家,人民利益,少抗议,少约见. 以上皆为忠贞觐言,听之,则国泰民安,不听,则如一位老网友所担忧:当年忠贞为国筹，何曾怕断头，如今天下红遍，江山靠谁守?业未就，身躯倦，鬓已秋，岂将夙愿，付与东流?]]></description>
			<content:encoded><![CDATA[<p>昨天看了新闻,大概的意思就是一座老夫子庙,因为修水库,把他永远的埋在了水下,现在需要花了大量的人力物力,到水下勘探,看看原来他是长什嘛样子,为现在整体原样重建做参考.修建孔庙是功高德颂的事情,他不仅能表示我们还是在沐浴儒家思想下,还能为国家挣点旅游门票费,公众更是多了一个休闲的好去处,应该修建.</p>
<p>同样还是新闻,泰国人入境枪杀中国公民,注意是泰国军人持枪入我境枪杀我国公民,还有中国渔船在中国的海域上进行捕鱼活动被韩国军警人船扣押,更有南沙群岛500多个中国海岛,被它国所占,他们还向国际上诉苦,说中国以大国这位,欺负他们小国!!!</p>
<p>新闻还是新闻!计划生育社会抚养费去向成谜,年规模或超200亿,计划生育?社会抚养费?这些个搞笑的名词,成了人类历史上最大的悲哀,而且社会抚养费还去向成谜?</p>
<p>作为良民,我想理论上是可以谈谈国是的,必竞我们还在红旗下,还是新中国, 还是社会主义国家,还是人民当家作主.所以我还是想谈谈我的想法,一个中国良民的想法,一个还能分清青红皂白,还能区别轻重缓急的正常中国良民的想法.我们的国家,在经济上,近几年发生了翻天覆地的变化,人民的生活日益好转,但同时,<span style="color: #ff0000;">国内社会风气败坏,官寮腐败成风,人们信仰迷失,政治斗争预演预烈,为了权力,为了经济利益,政府与政府之间,政府与人民,人民与人民之间,相互勾心斗角,相互尔虞我诈;而国外,则以美国为首的西方国家,从经济,政治,军事等方便对中国进行包抄.大力宣讲中国威胁论,煽动中国周边国家向中国挑动事端,占领中国领土</span>&#8230;&#8230;这一切的一切,可谓是内忧外患.<span style="color: #008000;">我认为国家当务之急,应该对内严惩腐败,整治社会风气,维护社会稳定,重新树产人们的生活及价值观,大力发展农业,大力发展科技,教育,大力发展军事,特别是加大发展海军,空军力度,提高其实际作战能力,适当降低经济增长预期,加强对边疆资源的开发利用及防守,承认并改正所谓的计划生育错误政策,少提有关部门,少说有人,认真处理社会矛盾及事故;对外则团结”有关”力量,加大在国际上的声音,加强在国际上的存在,坚决打击一切入侵行为,保障,保护国家,人民利益,少抗议,少约见</span>.</p>
<p>以上皆为忠贞觐言,听之,则国泰民安,不听,则如一位老网友所担忧:当年忠贞为国筹，何曾怕断头，如今天下红遍，江山靠谁守?业未就，身躯倦，鬓已秋，岂将夙愿，付与东流?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.voland.com.cn/on-the-country-is/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Debian Linux下配置Apache2与SVN整合</title>
		<link>http://www.voland.com.cn/configuring-apache2-and-svn-integration-in-the-debian-linux</link>
		<comments>http://www.voland.com.cn/configuring-apache2-and-svn-integration-in-the-debian-linux#comments</comments>
		<pubDate>Mon, 12 Mar 2012 01:59:06 +0000</pubDate>
		<dc:creator>Nortan</dc:creator>
				<category><![CDATA[常用]]></category>
		<category><![CDATA[配置]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[SVN]]></category>

		<guid isPermaLink="false">http://www.voland.com.cn/?p=749</guid>
		<description><![CDATA[本文介绍关于在debian系统下对svn与apache整合的安装配置及管理 一.安装环境： Debian Liunx（5.x / 6.x） + apache2（2.2.x）+ Subversion（1.6.x） 二,安装与配置 1.使用aptitude安装 apache2， openssl（https） 和 svn,为什么要使用aptitude,我相信大家懂的,不说了 sudo aptitude install apache2 apache2-mpm-worker openssl subversion libapache2-svn 2.新建svn根目录（~/svnroot），配置目录所有者（www-data）以及权限 mkdir ~/svnroot sudo chown www-data:www-data -R ~/svnroot sudo chmod 770 -R ~/svnroot 3.创建 svn 用户密码配置文件：/etc/apache2/dav_svn.passwd /usr/bin/htpasswd -c /etc/apache2/dav_svn.passwd admin New password: Re-type new password: Adding password for user admin 密码文件默认加密方法：CRYPT encryption，密码文件格式：用户名:密码 [...]]]></description>
			<content:encoded><![CDATA[<p>本文介绍关于在debian系统下对svn与apache整合的安装配置及管理</p>
<p><strong>一.安装环境：</strong><br />
Debian Liunx（5.x / 6.x） + apache2（2.2.x）+ Subversion（1.6.x）</p>
<p><strong>二,安装与配置</strong><br />
<strong>1.使用aptitude安装 apache2， openssl（https） 和 svn,为什么要使用aptitude,我相信大家懂的,不说了</strong></p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">sudo aptitude install apache2 apache2-mpm-worker openssl subversion libapache2-svn</pre></div></div>

<p><strong>2.新建svn根目录（~/svnroot），配置目录所有者（www-data）以及权限</strong></p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">mkdir ~/svnroot
sudo chown www-data:www-data -R ~/svnroot
sudo chmod 770 -R ~/svnroot</pre></div></div>

<p><strong>3.创建 svn 用户密码配置文件：/etc/apache2/dav_svn.passwd</strong><span id="more-749"></span></p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">/usr/bin/htpasswd -c /etc/apache2/dav_svn.passwd admin
New password:
Re-type new password:
Adding password for user admin</pre></div></div>

<p>密码文件默认加密方法：CRYPT encryption，密码文件格式：<strong>用户名:密码</strong><br />
基于安全考虑，建议加密方法使用 SHA encryption：<strong>htpasswd -s 用户名</strong></p>
<p><strong>4.创建 svn 目录权限配置文件：/etc/apache2/dav_svn.authz</strong></p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">cat /etc/apache2/dav_svn.authz
&nbsp;
[groups]
admin=admin
guest=test1,test2 
[testprj:/]    # 版本库 testprj权限配置
*=              # 默认禁止所有用户访问
@admin=rw       # admin 组有 rw 权限
test1=r         # 用户 test1 有 r 权限</pre></div></div>

<p><strong>5.配置 /etc/apache2/mods-available/dav_svn.conf</strong></p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">vim /etc/apache2/mods-available/dav_svn.conf</pre></div></div>

<p>创建 svn location，指定 svn 目录，认证方式，认证信息；</p>
<p>指定 dav_svn.passwd 用户密码配置文件路径；</p>
<p>指定 dav_svn.authz 目录权限配置文件路径。</p>

<div class="wp_syntax"><div class="code"><pre class="config" style="font-family:monospace;">&lt;Location /svn&gt;
  DAV svn
  SVNParentPath /home/nortan/svnroot
  AuthType Basic
  AuthName &quot;Subversion Repository&quot;
  AuthUserFile /etc/apache2/dav_svn.passwd
  AuthzSVNAccessFile /etc/apache2/dav_svn.authz
  Require valid-user
&lt;/Location&gt;</pre></div></div>

<p><strong>6.创建 svn 版本库（testprj）</strong></p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">su - www-data
svnadmin create ~/svnroot/testprj</pre></div></div>

<p><strong>7.配置完成，重新启动 apache2 服务</strong></p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">su - root
/etc/init.d/apache2 restart</pre></div></div>

<p>三，管理：</p>
<p><strong>1，新建用户（htpasswd SHA 加密方法，参数：-s）</strong></p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">sudo /usr/bin/htpasswd -s /etc/apache2/dav_svn.passwd 用户名</pre></div></div>

<p><strong>2，删除用户（vi/vim 编辑）</strong></p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">sudo vim /etc/apache2/dav_svn.passwd</pre></div></div>

<p>查找指定用户名：/用户名</p>
<p>删除用户指定行：dd</p>
<p>保存退出：:wq</p>
]]></content:encoded>
			<wfw:commentRss>http://www.voland.com.cn/configuring-apache2-and-svn-integration-in-the-debian-linux/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>rsync使用delete参数无法同步删除的问题</title>
		<link>http://www.voland.com.cn/rsync-to-use-the-delete-parameters-can-not-be-synchronized-to-delete</link>
		<comments>http://www.voland.com.cn/rsync-to-use-the-delete-parameters-can-not-be-synchronized-to-delete#comments</comments>
		<pubDate>Thu, 08 Mar 2012 19:12:34 +0000</pubDate>
		<dc:creator>Nortan</dc:creator>
				<category><![CDATA[配置]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[rsync]]></category>
		<category><![CDATA[同步删除]]></category>

		<guid isPermaLink="false">http://www.voland.com.cn/?p=746</guid>
		<description><![CDATA[理论上说rsync同步过程中,如果带上delete的参数，当源目录中的文件删除时，同步后目标目录中的文件也会被删除，但如果源目录写法不当，可能无法达到同步删除目标目录的文件。例如： /usr/bin/rsync -avzrL --progress --delete ~/src/* ~/dest/ 当删除src下的文件或文件夹时，同步后dest中还是存在，如果是删除src的子目录下的，同步后dest中会被删除，而下面命令就不一样，不管删除的是哪个文件夹下的内容，同步dest都会做相同的删除: /usr/bin/rsync -avzrL --progress --delete ~/src/ ~/dest/ 上述两条命令的不同之处就是在src后面是否带*号，另外如果src目录后不带斜杠，那么是将src目录复制到dest中，包含了src目录，否则是把src目录下的文件同步到dest中，不包含src目录。]]></description>
			<content:encoded><![CDATA[<p>理论上说rsync同步过程中,如果带上delete的参数，当源目录中的文件删除时，同步后目标目录中的文件也会被删除，但如果源目录写法不当，可能无法达到同步删除目标目录的文件。例如：</p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">/usr/bin/rsync -avzrL --progress --delete ~/src/* ~/dest/</pre></div></div>

<p>当删除src下的文件或文件夹时，同步后dest中还是存在，如果是删除src的子目录下的，同步后dest中会被删除，而下面命令就不一样，不管删除的是哪个文件夹下的内容，同步dest都会做相同的删除:</p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">/usr/bin/rsync -avzrL --progress --delete ~/src/ ~/dest/</pre></div></div>

<p><strong>上述两条命令的不同之处就是在src后面是否带*号</strong>，另外如果src目录后不带斜杠，那么是将src目录复制到dest中，包含了src目录，否则是把src目录下的文件同步到dest中，不包含src目录。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.voland.com.cn/rsync-to-use-the-delete-parameters-can-not-be-synchronized-to-delete/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>debian修改crontab默认编辑器为vim</title>
		<link>http://www.voland.com.cn/debian-modify-the-crontab-default-editor-is-vim</link>
		<comments>http://www.voland.com.cn/debian-modify-the-crontab-default-editor-is-vim#comments</comments>
		<pubDate>Mon, 13 Feb 2012 23:45:09 +0000</pubDate>
		<dc:creator>Nortan</dc:creator>
				<category><![CDATA[人生百味]]></category>
		<category><![CDATA[crontab]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://www.voland.com.cn/?p=742</guid>
		<description><![CDATA[debian终端下默认编辑器为nano，比如crontab -e就会打开nano，这个编辑器用起来很不习惯，想修改为vim,当然,你的debian系统必须先安装vim.如果已经安装vim,请输入如下命令: 输入命令： update-alternatives --config editor 然后选择/usr/vim/vim.basic就OK了,vim.tiny与vim.basic的区别是vim.basic为完全的vim,而vim.tiny为简化版,功能上有所区别,如不支持高亮等等.]]></description>
			<content:encoded><![CDATA[<p>debian终端下默认编辑器为nano，比如crontab -e就会打开nano，这个编辑器用起来很不习惯，想修改为vim,当然,你的debian系统必须先安装vim.如果已经安装vim,请输入如下命令:</p>
<p>输入命令：</p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">update-alternatives --config editor</pre></div></div>

<p>然后选择/usr/vim/vim.basic就OK了,vim.tiny与vim.basic的区别是vim.basic为完全的vim,而vim.tiny为简化版,功能上有所区别,如不支持高亮等等.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.voland.com.cn/debian-modify-the-crontab-default-editor-is-vim/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>北京十六方数据科技有限公司招聘java开发人员 年薪10W~15W</title>
		<link>http://www.voland.com.cn/16-party-data-technology-co-ltd-in-beijing-to-recruit-java-developer-salary-10w-15w</link>
		<comments>http://www.voland.com.cn/16-party-data-technology-co-ltd-in-beijing-to-recruit-java-developer-salary-10w-15w#comments</comments>
		<pubDate>Thu, 02 Feb 2012 23:08:26 +0000</pubDate>
		<dc:creator>Nortan</dc:creator>
				<category><![CDATA[一起分享]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.voland.com.cn/?p=738</guid>
		<description><![CDATA[公司研发新产品,需要招聘两名java开发人员,公司以前从不加班,但目前公司研发新产品,在产品研发关键时候可能偶尔会有加班,加班一般安排在周末,占用一天时间,大家如有能力有兴趣,请发邮件到job1@16ds.com,这个招聘邮箱为研发部门专用 职位要求分别如下: 职位一:Java Swing 开发工程师 学 历： 大专及以上 招聘人数： 1 人 年薪:10W~15W 任职条件： 有2年及以上Java开发经验； 熟练掌握swing,有实际的swing C/S程序开发经验。对j2ee开发有一定经验 思维活跃、心思缜密，考虑问题全面，具备较强的钻研精神及学习能力； 具备良好的团队合作精神、性格开朗，优秀的语言表达能力； 有android开发经验者优先考虑。 工作职责： 按美工设计完成产品UI的实现(使用Swing) 理解产品需求，能够完成模块的详细设计及实现、编写相关的技术文档； 进行编码和单元测试、bug定位和修复，并根据要求修改、完善产品。 职位二:j2ee开发工程师 学 历： 大专及以上 招聘人数： 1 人 年薪:6W~12W 任职条件： 有1年及以上Java开发经验,对j2ee熟练掌握； 熟悉HTML、CSS,javascript的开发知识，熟悉jquery等JS框架为佳； 熟悉MYSQL,需要一定的SQL编写能力 思维活跃、心思缜密，考虑问题全面，具备较强的钻研精神及学习能力； 具备良好的团队合作精神、性格开朗，优秀的语言表达能力； 工作职责： 按美工设计完成产品WEB页面的实现(html,jquery,css) 理解产品需求，能够完成模块的详细设计及实现、编写相关的技术文档； 进行编码和单元测试、bug定位和修复，并根据要求修改、完善产品。]]></description>
			<content:encoded><![CDATA[<p>公司研发新产品,需要招聘两名java开发人员,公司以前从不加班,但目前公司研发新产品,在产品研发关键时候可能偶尔会有加班,加班一般安排在周末,占用一天时间,大家如有能力有兴趣,请发邮件到job1@16ds.com,这个招聘邮箱为研发部门专用<br />
职位要求分别如下: <span id="more-738"></span></p>
<p>职位一:Java Swing 开发工程师<br />
学    历： 大专及以上<br />
招聘人数： 1 人<br />
年薪:10W~15W </p>
<p>任职条件：<br />
    有2年及以上Java开发经验；<br />
    熟练掌握swing,有实际的swing C/S程序开发经验。对j2ee开发有一定经验<br />
    思维活跃、心思缜密，考虑问题全面，具备较强的钻研精神及学习能力；<br />
    具备良好的团队合作精神、性格开朗，优秀的语言表达能力；<br />
    有android开发经验者优先考虑。 </p>
<p>工作职责：<br />
    按美工设计完成产品UI的实现(使用Swing)<br />
    理解产品需求，能够完成模块的详细设计及实现、编写相关的技术文档；<br />
    进行编码和单元测试、bug定位和修复，并根据要求修改、完善产品。 </p>
<p>职位二:j2ee开发工程师<br />
学    历： 大专及以上<br />
招聘人数： 1 人<br />
年薪:6W~12W </p>
<p>任职条件：<br />
    有1年及以上Java开发经验,对j2ee熟练掌握；<br />
    熟悉HTML、CSS,javascript的开发知识，熟悉jquery等JS框架为佳；<br />
    熟悉MYSQL,需要一定的SQL编写能力<br />
    思维活跃、心思缜密，考虑问题全面，具备较强的钻研精神及学习能力；<br />
    具备良好的团队合作精神、性格开朗，优秀的语言表达能力； </p>
<p>工作职责：<br />
    按美工设计完成产品WEB页面的实现(html,jquery,css)<br />
    理解产品需求，能够完成模块的详细设计及实现、编写相关的技术文档；<br />
    进行编码和单元测试、bug定位和修复，并根据要求修改、完善产品。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.voland.com.cn/16-party-data-technology-co-ltd-in-beijing-to-recruit-java-developer-salary-10w-15w/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ActiveMQ配置之配置连接密码</title>
		<link>http://www.voland.com.cn/activemq5-5-configuration-password</link>
		<comments>http://www.voland.com.cn/activemq5-5-configuration-password#comments</comments>
		<pubDate>Thu, 29 Dec 2011 05:32:45 +0000</pubDate>
		<dc:creator>Nortan</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[配置]]></category>
		<category><![CDATA[ActiveMQ]]></category>

		<guid isPermaLink="false">http://www.voland.com.cn/?p=734</guid>
		<description><![CDATA[1、控制台安全配置，打开conf/jetty.xml文件，找到 &#60;bean id=&#34;securityConstraint&#34; class=&#34;org.eclipse.jetty.http.security.Constraint&#34;&#62; &#60;property name=&#34;name&#34; value=&#34;BASIC&#34; /&#62; &#60;property name=&#34;roles&#34; value=&#34;admin&#34; /&#62; &#60;property name=&#34;authenticate&#34; value=&#34;false&#34; /&#62; &#60;/bean&#62; 将“false”改为“true”即可。用户名和密码存放在conf/credentials.properties文件中。 2、生产者和消费者连接MQ需要密码 打开conf/activemq.xml文件，在标签里的标签前加入： &#60;plugins&#62; &#60;simpleAuthenticationPlugin&#62; &#60;users&#62; &#60;authenticationUser username=&#34;${activemq.username}&#34; password=&#34;${activemq.password}&#34; groups=&#34;users,admins&#34;/&#62; &#60;/users&#62; &#60;/simpleAuthenticationPlugin&#62; &#60;/plugins&#62; 请注意,这个配置必须在标签前，否则启动ActiveMQ会报错。]]></description>
			<content:encoded><![CDATA[<p>1、控制台安全配置，打开conf/jetty.xml文件，找到</p>

<div class="wp_syntax"><div class="code"><pre class="config" style="font-family:monospace;">    &lt;bean id=&quot;securityConstraint&quot; class=&quot;org.eclipse.jetty.http.security.Constraint&quot;&gt;
        &lt;property name=&quot;name&quot; value=&quot;BASIC&quot; /&gt;
        &lt;property name=&quot;roles&quot; value=&quot;admin&quot; /&gt;
        &lt;property name=&quot;authenticate&quot; value=&quot;false&quot; /&gt;
    &lt;/bean&gt;</pre></div></div>

<p>   将“false”改为“true”即可。用户名和密码存放在conf/credentials.properties文件中。<br />
2、生产者和消费者连接MQ需要密码<br />
   打开conf/activemq.xml文件，在<broker>标签里的<systemUsage>标签前加入：</p>

<div class="wp_syntax"><div class="code"><pre class="config" style="font-family:monospace;">   &lt;plugins&gt;   
     &lt;simpleAuthenticationPlugin&gt;   
       &lt;users&gt;   
          &lt;authenticationUser username=&quot;${activemq.username}&quot; password=&quot;${activemq.password}&quot; groups=&quot;users,admins&quot;/&gt;   
       &lt;/users&gt;   
      &lt;/simpleAuthenticationPlugin&gt;   
   &lt;/plugins&gt;</pre></div></div>

<p>   请注意,这个配置必须在<systemUsage>标签前，否则启动ActiveMQ会报错。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.voland.com.cn/activemq5-5-configuration-password/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>重设置debian 6系统中mysql5.1的root密码</title>
		<link>http://www.voland.com.cn/reset-debian-6-root-password-for-system-mysql5-1</link>
		<comments>http://www.voland.com.cn/reset-debian-6-root-password-for-system-mysql5-1#comments</comments>
		<pubDate>Thu, 27 Oct 2011 08:44:39 +0000</pubDate>
		<dc:creator>Nortan</dc:creator>
				<category><![CDATA[常用]]></category>
		<category><![CDATA[数据库]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.voland.com.cn/?p=721</guid>
		<description><![CDATA[今天把一台服务器的系统由debian5升级到了debian6,升级后发现mysql没有启动起来,以前同样的升级也没有遇到过.那就重新安装一个mysql5.1吧,安装完成后,使用root登录不进去了! 使用 sudo cat /etc/mysql/debian.cnf 得到一个用户名为:debian-sys-maint,密码为:YkUUwTfIbqMxi8Vs的用户.然后使用 mysql -udebian-sys-maint -p 成功进入mysql,然后就修改root的密码,如下: UPDATE user SET Password=PASSWORD&#40;'newpassword'&#41; WHERE USER='root'; FLUSH PRIVILEGES; 这里再写几个常用的sql CREATE DATABASE IF NOT EXISTS RCG DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; GRANT ALL PRIVILEGES ON RCG.* TO rcg@localhost IDENTIFIED BY &#8216;rcg&#8217; WITH GRANT OPTION;]]></description>
			<content:encoded><![CDATA[<p>今天把一台服务器的系统由debian5升级到了debian6,升级后发现mysql没有启动起来,以前同样的升级也没有遇到过.那就重新安装一个mysql5.1吧,安装完成后,使用root登录不进去了!<br />
使用</p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">sudo cat /etc/mysql/debian.cnf</pre></div></div>

<p>得到一个用户名为:debian-sys-maint,密码为:YkUUwTfIbqMxi8Vs的用户.然后使用</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;">mysql <span style="color: #66cc66;">-</span>udebian<span style="color: #66cc66;">-</span>sys<span style="color: #66cc66;">-</span>maint <span style="color: #66cc66;">-</span>p</pre></div></div>

<p>成功进入mysql,然后就修改root的密码,如下:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">UPDATE</span> user <span style="color: #993333; font-weight: bold;">SET</span> Password<span style="color: #66cc66;">=</span>PASSWORD<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'newpassword'</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">WHERE</span> USER<span style="color: #66cc66;">=</span><span style="color: #ff0000;">'root'</span>;
<span style="color: #993333; font-weight: bold;">FLUSH</span> PRIVILEGES;</pre></div></div>

<p>这里再写几个常用的sql<br />
CREATE DATABASE IF NOT EXISTS RCG DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;<br />
GRANT ALL PRIVILEGES ON RCG.* TO rcg@localhost IDENTIFIED BY &#8216;rcg&#8217; WITH GRANT OPTION;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.voland.com.cn/reset-debian-6-root-password-for-system-mysql5-1/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Myeclipse6.5破解类</title>
		<link>http://www.voland.com.cn/myeclipse6-5-po-jie-lei</link>
		<comments>http://www.voland.com.cn/myeclipse6-5-po-jie-lei#comments</comments>
		<pubDate>Mon, 10 Oct 2011 07:52:21 +0000</pubDate>
		<dc:creator>Nortan</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[常用]]></category>
		<category><![CDATA[Myeclipse6.5]]></category>

		<guid isPermaLink="false">http://www.voland.com.cn/?p=716</guid>
		<description><![CDATA[Myeclipse6.5可能大家也不常用了,我也基本不用,不过用到的时候,没有注册码也难受,在网上找到这个类来生成注册码,还是比较好用的.放在这里备忘: import java.text.DecimalFormat; import java.text.NumberFormat; import java.text.SimpleDateFormat; import java.util.Calendar; &#160; public class Crack &#123; //myeclipseBlue6.5破解,运行即可得到key public static final void main&#40;String&#91;&#93; args&#41;&#123; String id=&#34;nortan&#34;; //这是指注册的名称 String num=&#34;999&#34;; System.out.println&#40;getSerial&#40;id,&#34;100&#34;,num,false&#41;&#41;; &#125; public static String getSerial&#40;String userId, String version, String licenseNum, boolean selected&#41; &#123; Calendar cal = Calendar.getInstance&#40;&#41;; cal.add&#40;1, 3&#41;; cal.add&#40;6, -1&#41;; NumberFormat nf = new DecimalFormat&#40;&#34;000&#34;&#41;; licenseNum = [...]]]></description>
			<content:encoded><![CDATA[<p>Myeclipse6.5可能大家也不常用了,我也基本不用,不过用到的时候,没有注册码也难受,在网上找到这个类来生成注册码,还是比较好用的.放在这里备忘:<span id="more-716"></span></p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.text.DecimalFormat</span><span style="color: #339933;">;</span>   
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.text.NumberFormat</span><span style="color: #339933;">;</span>   
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.text.SimpleDateFormat</span><span style="color: #339933;">;</span>   
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.util.Calendar</span><span style="color: #339933;">;</span>   
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Crack <span style="color: #009900;">&#123;</span>   
<span style="color: #666666; font-style: italic;">//myeclipseBlue6.5破解,运行即可得到key  </span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>   
        <span style="color: #003399;">String</span> id<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;nortan&quot;</span><span style="color: #339933;">;</span>   <span style="color: #666666; font-style: italic;">//这是指注册的名称  </span>
        <span style="color: #003399;">String</span> num<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;999&quot;</span><span style="color: #339933;">;</span>   
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>getSerial<span style="color: #009900;">&#40;</span>id,<span style="color: #0000ff;">&quot;100&quot;</span>,num,<span style="color: #000066; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>    
    <span style="color: #009900;">&#125;</span>   
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #003399;">String</span> getSerial<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> userId, <span style="color: #003399;">String</span> version,   
            <span style="color: #003399;">String</span> licenseNum, <span style="color: #000066; font-weight: bold;">boolean</span> selected<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>   
        <span style="color: #003399;">Calendar</span> cal <span style="color: #339933;">=</span> <span style="color: #003399;">Calendar</span>.<span style="color: #006633;">getInstance</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
        cal.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span>, <span style="color: #cc66cc;">3</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
        cal.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">6</span>, <span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
        <span style="color: #003399;">NumberFormat</span> nf <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">DecimalFormat</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;000&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
        licenseNum <span style="color: #339933;">=</span> nf.<span style="color: #006633;">format</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Integer</span>.<span style="color: #006633;">valueOf</span><span style="color: #009900;">&#40;</span>licenseNum<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
        <span style="color: #003399;">String</span> verTime <span style="color: #339933;">=</span> selected <span style="color: #339933;">?</span> <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">StringBuffer</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;-&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span>   
                <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">SimpleDateFormat</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;yyMMdd&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">format</span><span style="color: #009900;">&#40;</span>cal.<span style="color: #006633;">getTime</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span>   
                <span style="color: #0000ff;">&quot;0&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;-1312310&quot;</span><span style="color: #339933;">;</span><span style="color: #666666; font-style: italic;">//这的时间是指注册到期时间，可以自己修改  </span>
        <span style="color: #003399;">String</span> type <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;YE3MB-&quot;</span><span style="color: #339933;">;</span>   
        <span style="color: #003399;">String</span> need <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">StringBuffer</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span>.<span style="color: #006633;">valueOf</span><span style="color: #009900;">&#40;</span>userId.<span style="color: #006633;">substring</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>   
                .<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span>type<span style="color: #009900;">&#41;</span>.<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span>version<span style="color: #009900;">&#41;</span>.<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span>licenseNum<span style="color: #009900;">&#41;</span>   
                .<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span>verTime<span style="color: #009900;">&#41;</span>.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
        <span style="color: #003399;">String</span> dx <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">StringBuffer</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span>.<span style="color: #006633;">valueOf</span><span style="color: #009900;">&#40;</span>need<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>   
                .<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span>   
                        <span style="color: #0000ff;">&quot;Decompiling this copyrighted software is a violation of both your license agreement and the Digital Millenium Copyright Act of 1998 (http://www.loc.gov/copyright/legislation/dmca.pdf). Under section 1204 of the DMCA, penalties range up to a $500,000 fine or up to five years imprisonment for a first offense. Think about it; pay for a license, avoid prosecution, and feel better about yourself.&quot;</span><span style="color: #009900;">&#41;</span>   
&nbsp;
                        .<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span>userId<span style="color: #009900;">&#41;</span>.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
        <span style="color: #000066; font-weight: bold;">int</span> suf <span style="color: #339933;">=</span> decode<span style="color: #009900;">&#40;</span>dx<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
        <span style="color: #003399;">String</span> code <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">StringBuffer</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span>.<span style="color: #006633;">valueOf</span><span style="color: #009900;">&#40;</span>need<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span>   
                <span style="color: #003399;">String</span>.<span style="color: #006633;">valueOf</span><span style="color: #009900;">&#40;</span>suf<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
        <span style="color: #000000; font-weight: bold;">return</span> change<span style="color: #009900;">&#40;</span>code<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    <span style="color: #009900;">&#125;</span>   
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">int</span> decode<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> s<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>   
        <span style="color: #000066; font-weight: bold;">int</span> i <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>   
        <span style="color: #000066; font-weight: bold;">char</span> ac<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> s.<span style="color: #006633;">toCharArray</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
        <span style="color: #000066; font-weight: bold;">int</span> j <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>   
        <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> k <span style="color: #339933;">=</span> ac.<span style="color: #006633;">length</span><span style="color: #339933;">;</span> j <span style="color: #339933;">&lt;</span> k<span style="color: #339933;">;</span> j<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>   
            i <span style="color: #339933;">=</span> <span style="color: #cc66cc;">31</span> <span style="color: #339933;">*</span> i <span style="color: #339933;">+</span> ac<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>   
&nbsp;
        <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #003399;">Math</span>.<span style="color: #006633;">abs</span><span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    <span style="color: #009900;">&#125;</span>   
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #003399;">String</span> change<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> s<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>   
        <span style="color: #000066; font-weight: bold;">byte</span> abyte0<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> s.<span style="color: #006633;">getBytes</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
        <span style="color: #000066; font-weight: bold;">char</span> ac<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #000066; font-weight: bold;">char</span><span style="color: #009900;">&#91;</span>s.<span style="color: #006633;">length</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>   
        <span style="color: #000066; font-weight: bold;">int</span> i <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>   
        <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> k <span style="color: #339933;">=</span> abyte0.<span style="color: #006633;">length</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> k<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>   
            <span style="color: #000066; font-weight: bold;">int</span> j <span style="color: #339933;">=</span> abyte0<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>   
            <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>j <span style="color: #339933;">&gt;=</span> <span style="color: #cc66cc;">48</span> <span style="color: #339933;">&amp;&amp;</span> j <span style="color: #339933;">&lt;=</span> <span style="color: #cc66cc;">57</span><span style="color: #009900;">&#41;</span>   
                j <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>j <span style="color: #339933;">-</span> <span style="color: #cc66cc;">48</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">5</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">%</span> <span style="color: #cc66cc;">10</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">48</span><span style="color: #339933;">;</span>   
            <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>j <span style="color: #339933;">&gt;=</span> <span style="color: #cc66cc;">65</span> <span style="color: #339933;">&amp;&amp;</span> j <span style="color: #339933;">&lt;=</span> <span style="color: #cc66cc;">90</span><span style="color: #009900;">&#41;</span>   
                j <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>j <span style="color: #339933;">-</span> <span style="color: #cc66cc;">65</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">13</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">%</span> <span style="color: #cc66cc;">26</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">65</span><span style="color: #339933;">;</span>   
            <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>j <span style="color: #339933;">&gt;=</span> <span style="color: #cc66cc;">97</span> <span style="color: #339933;">&amp;&amp;</span> j <span style="color: #339933;">&lt;=</span> <span style="color: #cc66cc;">122</span><span style="color: #009900;">&#41;</span>   
                j <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>j <span style="color: #339933;">-</span> <span style="color: #cc66cc;">97</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">13</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">%</span> <span style="color: #cc66cc;">26</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">97</span><span style="color: #339933;">;</span>   
            ac<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">char</span><span style="color: #009900;">&#41;</span>j<span style="color: #339933;">;</span>   
        <span style="color: #009900;">&#125;</span>   
&nbsp;
        <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #003399;">String</span>.<span style="color: #006633;">valueOf</span><span style="color: #009900;">&#40;</span>ac<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    <span style="color: #009900;">&#125;</span>   
<span style="color: #009900;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.voland.com.cn/myeclipse6-5-po-jie-lei/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JTextField如何限制输入长度</title>
		<link>http://www.voland.com.cn/how-to-limit-input-length-of-jtextfield</link>
		<comments>http://www.voland.com.cn/how-to-limit-input-length-of-jtextfield#comments</comments>
		<pubDate>Thu, 29 Sep 2011 06:55:42 +0000</pubDate>
		<dc:creator>Nortan</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[JTextField]]></category>
		<category><![CDATA[swing]]></category>

		<guid isPermaLink="false">http://www.voland.com.cn/?p=713</guid>
		<description><![CDATA[关于JTextField如何限制输入长度,网上的做法一般是两种情况,第一种是对JTextField增加addKeyLisener事件,第二种是对Document的变化进行监听.实际这两种办法都不好,因为代码太乱!我的办法是重写Document中的insertString方法,来表达控制限制输入长度的目的. 在这里我把他封装成LimitDocument类,这个类的具体代码如下: import javax.swing.text.AttributeSet; import javax.swing.text.BadLocationException; import javax.swing.text.PlainDocument; &#160; /** * 限制JtextField的最大输入 * @author nortan * */ public class LimitDocument extends PlainDocument &#123; //只充许输入maxLength 个字符 private int maxLength = 8; &#160; public LimitDocument&#40;int maxLength&#41; &#123; super&#40;&#41;; this.maxLength = maxLength; &#125; &#160; public LimitDocument&#40;Content c, int maxLength&#41; &#123; super&#40;c&#41;; this.maxLength = maxLength; &#125; private static final [...]]]></description>
			<content:encoded><![CDATA[<p>关于JTextField如何限制输入长度,网上的做法一般是两种情况,第一种是对JTextField增加addKeyLisener事件,第二种是对Document的变化进行监听.实际这两种办法都不好,因为代码太乱!我的办法是重写Document中的insertString方法,来表达控制限制输入长度的目的.<span id="more-713"></span><br />
在这里我把他封装成LimitDocument类,这个类的具体代码如下:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.swing.text.AttributeSet</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.swing.text.BadLocationException</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.swing.text.PlainDocument</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #008000; font-style: italic; font-weight: bold;">/**
 * 限制JtextField的最大输入
 * @author nortan
 *
 */</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> LimitDocument <span style="color: #000000; font-weight: bold;">extends</span> <span style="color: #003399;">PlainDocument</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #666666; font-style: italic;">//只充许输入maxLength 个字符</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">int</span> maxLength <span style="color: #339933;">=</span> <span style="color: #cc66cc;">8</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> LimitDocument<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> maxLength<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">super</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">maxLength</span> <span style="color: #339933;">=</span> maxLength<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> LimitDocument<span style="color: #009900;">&#40;</span>Content c, <span style="color: #000066; font-weight: bold;">int</span> maxLength<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">super</span><span style="color: #009900;">&#40;</span>c<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">maxLength</span> <span style="color: #339933;">=</span> maxLength<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">long</span> serialVersionUID <span style="color: #339933;">=</span> 1L<span style="color: #339933;">;</span>
&nbsp;
	@Override
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> insertString<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> offset, <span style="color: #003399;">String</span> s, <span style="color: #003399;">AttributeSet</span> a<span style="color: #009900;">&#41;</span>
			<span style="color: #000000; font-weight: bold;">throws</span> <span style="color: #003399;">BadLocationException</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>s <span style="color: #339933;">==</span> <span style="color: #000066; font-weight: bold;">null</span> <span style="color: #339933;">||</span> offset <span style="color: #339933;">&lt;</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>  
            <span style="color: #000000; font-weight: bold;">return</span><span style="color: #339933;">;</span>  
        <span style="color: #009900;">&#125;</span>  
        <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> s.<span style="color: #006633;">length</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>  
            <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>getLength<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;</span> maxLength <span style="color: #339933;">-</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>  
                <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>  
            <span style="color: #009900;">&#125;</span>  
            <span style="color: #000000; font-weight: bold;">super</span>.<span style="color: #006633;">insertString</span><span style="color: #009900;">&#40;</span>offset <span style="color: #339933;">+</span> i, s.<span style="color: #006633;">substring</span><span style="color: #009900;">&#40;</span>i, i <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span>,  
                    a<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
        <span style="color: #009900;">&#125;</span>  
        <span style="color: #000000; font-weight: bold;">return</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span> 
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>对于想控制输入长度的JTextField,只要调用如下代码就成:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">//限制输入10个字符</span>
field.<span style="color: #006633;">setDocument</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> LimitDocument<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">10</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>这个类好不好用,我相信大家懂的</p>
]]></content:encoded>
			<wfw:commentRss>http://www.voland.com.cn/how-to-limit-input-length-of-jtextfield/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C++调用JVM.DLL来启动java程序</title>
		<link>http://www.voland.com.cn/c-calling-java-program-to-start-jvm-dll</link>
		<comments>http://www.voland.com.cn/c-calling-java-program-to-start-jvm-dll#comments</comments>
		<pubDate>Fri, 02 Sep 2011 09:55:16 +0000</pubDate>
		<dc:creator>Nortan</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.voland.com.cn/?p=707</guid>
		<description><![CDATA[eclipse可以使用startup.jar来启动,但一般会用eclipse.exe来启动程序.这样系统进程也是eclipse.exe,而不是java.exe或者javaw.exe.这个eclipse.exe是使用C调用jvm.dll来启动java程序,最近的项目是基于Swing的java程序,所以也需要写一个exe来启动程序. 原来已经做了一个startup.exe,是使用NSIS来实现的,这里代码就不写出来了,因为他没有多在意义,原因有二: 第一,他在静默状态下执行,360安全卫士认为他是一个病毒,好像以前诺顿也误报过.这里BS一下360安全卫士 第二,他执行javaw来调用java程序,进程显示还是javaw,这样不好看.在进程里看到叫nortan.exe多好,呵呵 使用C++调用JVM.DLL来启动java程序,先来看看别人画的一个原理图: 从这个图上中可以看出,最主要还是怎么使用C++加载jvm.dll,然后把其一系列的操作.根据这个思路,写出如下代码: #include &#60;windows.h&#62; #include &#60;jni.h&#62; #include &#60;string&#62; using namespace std; &#160; void vShowError&#40;string sErrorMessage&#41;; void vShowLastError&#40;string sErrorMessage&#41;; void vDestroyVM&#40;JNIEnv *env, JavaVM *jvm&#41;; void vAddOption&#40;string&#38; sName&#41;; &#160; JavaVMOption* vm_options; int mctOptions = 0; int mctOptionCapacity = 0; boolean GetApplicationHome&#40;char *buf, jint sz&#41;; typedef jint &#40;CALLBACK *CreateJavaVM&#41;&#40;JavaVM **pvm, JNIEnv **penv, void *args&#41;; [...]]]></description>
			<content:encoded><![CDATA[<p>eclipse可以使用startup.jar来启动,但一般会用eclipse.exe来启动程序.这样系统进程也是eclipse.exe,而不是java.exe或者javaw.exe.这个eclipse.exe是使用C调用jvm.dll来启动java程序,最近的项目是基于Swing的java程序,所以也需要写一个exe来启动程序.<br />
原来已经做了一个startup.exe,是使用NSIS来实现的,这里代码就不写出来了,因为他没有多在意义,原因有二:<br />
第一,他在静默状态下执行,360安全卫士认为他是一个病毒,好像以前诺顿也误报过.这里BS一下360安全卫士<br />
第二,他执行javaw来调用java程序,进程显示还是javaw,这样不好看.在进程里看到叫nortan.exe多好,呵呵</p>
<p>使用C++调用JVM.DLL来启动java程序,先来看看别人画的一个原理图:<span id="more-707"></span><br />
<div id="attachment_708" class="wp-caption aligncenter" style="width: 324px"><img src="http://www.voland.com.cn/wp-content/uploads/2011/09/218717.gif" alt="java启动原理图" title="218717" width="314" height="308" class="size-full wp-image-708" /><p class="wp-caption-text">java启动原理图</p></div><br />
从这个图上中可以看出,最主要还是怎么使用C++加载jvm.dll,然后把其一系列的操作.根据这个思路,写出如下代码:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &lt;windows.h&gt;</span>
<span style="color: #339933;">#include &lt;jni.h&gt;</span>
<span style="color: #339933;">#include &lt;string&gt;</span>
using namespace std<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">void</span> vShowError<span style="color: #009900;">&#40;</span><span style="color: #993333;">string</span> sErrorMessage<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #993333;">void</span> vShowLastError<span style="color: #009900;">&#40;</span><span style="color: #993333;">string</span> sErrorMessage<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #993333;">void</span> vDestroyVM<span style="color: #009900;">&#40;</span>JNIEnv <span style="color: #339933;">*</span>env<span style="color: #339933;">,</span> JavaVM <span style="color: #339933;">*</span>jvm<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #993333;">void</span> vAddOption<span style="color: #009900;">&#40;</span>string<span style="color: #339933;">&amp;</span> sName<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
JavaVMOption<span style="color: #339933;">*</span> vm_options<span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> mctOptions <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> mctOptionCapacity <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
boolean GetApplicationHome<span style="color: #009900;">&#40;</span><span style="color: #993333;">char</span> <span style="color: #339933;">*</span>buf<span style="color: #339933;">,</span> jint sz<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #993333;">typedef</span> jint <span style="color: #009900;">&#40;</span>CALLBACK <span style="color: #339933;">*</span>CreateJavaVM<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>JavaVM <span style="color: #339933;">**</span>pvm<span style="color: #339933;">,</span> JNIEnv <span style="color: #339933;">**</span>penv<span style="color: #339933;">,</span> <span style="color: #993333;">void</span> <span style="color: #339933;">*</span>args<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">int</span> WINAPI WinMain<span style="color: #009900;">&#40;</span>HINSTANCE hInstance<span style="color: #339933;">,</span> HINSTANCE hPrevInstance<span style="color: #339933;">,</span> PSTR szCmdLine<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> iCmdShow<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    JNIEnv <span style="color: #339933;">*</span>env<span style="color: #339933;">;</span>
    JavaVM <span style="color: #339933;">*</span>jvm<span style="color: #339933;">;</span>
    jint jintVMStartupReturnValue<span style="color: #339933;">;</span>
    jclass jclassStartup<span style="color: #339933;">;</span>
    jmethodID midStartup<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">// 确定各种文件所在的路径</span>
    <span style="color: #666666; font-style: italic;">// -应用的主目录</span>
    <span style="color: #993333;">char</span> home<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">2000</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>GetApplicationHome<span style="color: #009900;">&#40;</span>home<span style="color: #339933;">,</span> <span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span>home<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        vShowError<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;不能确定应用的主目录。&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #993333;">string</span> sAppHome<span style="color: #009900;">&#40;</span>home<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #993333;">string</span> sOption_AppHome <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;-Ddodo.home=&quot;</span> <span style="color: #339933;">+</span> sAppHome<span style="color: #339933;">;</span>
    <span style="color: #993333;">string</span> sJREPath <span style="color: #339933;">=</span> sAppHome <span style="color: #339933;">+</span> <span style="color: #ff0000;">&quot;\\jre&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #666666; font-style: italic;">// -VM路径</span>
    <span style="color: #993333;">string</span> sRuntimePath <span style="color: #339933;">=</span> sJREPath <span style="color: #339933;">+</span> <span style="color: #ff0000;">&quot;\<span style="color: #000099; font-weight: bold;">\b</span>in\\client&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #993333;">string</span> sJVMpath <span style="color: #339933;">=</span> sRuntimePath <span style="color: #339933;">+</span> <span style="color: #ff0000;">&quot;\\jvm.dll&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #666666; font-style: italic;">// -启动路径</span>
    <span style="color: #993333;">string</span> sBootPath <span style="color: #339933;">=</span> sJREPath <span style="color: #339933;">+</span> <span style="color: #ff0000;">&quot;\\lib&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #993333;">string</span> sOption_BootPath <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;-Dsun.boot.class.path=&quot;</span> <span style="color: #339933;">+</span> sBootPath<span style="color: #339933;">;</span>
    <span style="color: #666666; font-style: italic;">// -CLASSPATH</span>
	<span style="color: #993333;">string</span> sClassPath <span style="color: #339933;">=</span> sAppHome <span style="color: #339933;">+</span> <span style="color: #ff0000;">&quot;\\main\\startup.jar&quot;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #993333;">string</span> sOption_ClassPath <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;-Djava.class.path=&quot;</span> <span style="color: #339933;">+</span> sClassPath<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">// 设置VM参数</span>
    <span style="color: #666666; font-style: italic;">// vAddOption(string(&quot;-verbose&quot;));</span>
    vAddOption<span style="color: #009900;">&#40;</span>sOption_ClassPath<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    vAddOption<span style="color: #009900;">&#40;</span>sOption_AppHome<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #666666; font-style: italic;">// VM初始化参数</span>
    JavaVMInitArgs vm_args<span style="color: #339933;">;</span>
    vm_args.<span style="color: #202020;">version</span> <span style="color: #339933;">=</span> <span style="color: #208080;">0x00010002</span><span style="color: #339933;">;</span>
    vm_args.<span style="color: #202020;">options</span> <span style="color: #339933;">=</span> vm_options<span style="color: #339933;">;</span>
    vm_args.<span style="color: #202020;">nOptions</span> <span style="color: #339933;">=</span> mctOptions<span style="color: #339933;">;</span>
    vm_args.<span style="color: #202020;">ignoreUnrecognized</span> <span style="color: #339933;">=</span> JNI_TRUE<span style="color: #339933;">;</span>
    <span style="color: #666666; font-style: italic;">// 装入JVM库</span>
    HINSTANCE hJVM <span style="color: #339933;">=</span> LoadLibrary<span style="color: #009900;">&#40;</span>sJVMpath.<span style="color: #202020;">c_str</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> hJVM <span style="color: #339933;">==</span> NULL <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        vShowLastError<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;不能从下面的路径装入JVM：&quot;</span> <span style="color: #339933;">+</span> sJVMpath<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #666666; font-style: italic;">// 启动1.2/3/4 VM</span>
    CreateJavaVM lpfnCreateJavaVM <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>CreateJavaVM<span style="color: #009900;">&#41;</span> GetProcAddress<span style="color: #009900;">&#40;</span>hJVM<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;JNI_CreateJavaVM&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    jintVMStartupReturnValue <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">*</span>lpfnCreateJavaVM<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>jvm<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>env<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>vm_args<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #666666; font-style: italic;">// 是否成功？</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>jintVMStartupReturnValue <span style="color: #339933;">&lt;</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #993333;">string</span> sErrorMessage <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;创建VM失败。&quot;</span><span style="color: #339933;">;</span>
        vShowError<span style="color: #009900;">&#40;</span>sErrorMessage<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        vDestroyVM<span style="color: #009900;">&#40;</span>env<span style="color: #339933;">,</span> jvm<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #666666; font-style: italic;">// 要启动的类</span>
    <span style="color: #993333;">string</span> sStartupClass <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;DodoStartup&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #666666; font-style: italic;">// 注意句点符号已经被转换成斜杠</span>
    jclassStartup <span style="color: #339933;">=</span> env<span style="color: #339933;">-&gt;</span>FindClass<span style="color: #009900;">&#40;</span>sStartupClass.<span style="color: #202020;">c_str</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>jclassStartup <span style="color: #339933;">==</span> NULL<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #993333;">string</span> sErrorMessage <span style="color: #339933;">=</span><span style="color: #ff0000;">&quot;找不到启动类[&quot;</span> <span style="color: #339933;">+</span>sStartupClass <span style="color: #339933;">+</span> <span style="color: #ff0000;">&quot;]&quot;</span><span style="color: #339933;">;</span>
        vShowError<span style="color: #009900;">&#40;</span>sErrorMessage<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        vDestroyVM<span style="color: #009900;">&#40;</span>env<span style="color: #339933;">,</span> jvm<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #666666; font-style: italic;">// 要启动的方法</span>
    <span style="color: #993333;">string</span> sStartupMethod_Identifier <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;main&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #993333;">string</span> sStartupMethod_TypeDescriptor <span style="color: #339933;">=</span><span style="color: #ff0000;">&quot;([Ljava/lang/String;)V&quot;</span><span style="color: #339933;">;</span>
    midStartup <span style="color: #339933;">=</span> env<span style="color: #339933;">-&gt;</span>GetStaticMethodID<span style="color: #009900;">&#40;</span>jclassStartup<span style="color: #339933;">,</span>
    sStartupMethod_Identifier.<span style="color: #202020;">c_str</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
    sStartupMethod_TypeDescriptor.<span style="color: #202020;">c_str</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>midStartup <span style="color: #339933;">==</span> NULL<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #993333;">string</span> sErrorMessage <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;找不到启动方法[&quot;</span><span style="color: #339933;">+</span> sStartupClass <span style="color: #339933;">+</span> <span style="color: #ff0000;">&quot;.&quot;</span><span style="color: #339933;">+</span> sStartupMethod_Identifier
        <span style="color: #339933;">+</span> <span style="color: #ff0000;">&quot;]，类型描述符是[&quot;</span> <span style="color: #339933;">+</span> sStartupMethod_TypeDescriptor <span style="color: #339933;">+</span> <span style="color: #ff0000;">&quot;]&quot;</span><span style="color: #339933;">;</span>
        vShowError<span style="color: #009900;">&#40;</span>sErrorMessage<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        vDestroyVM<span style="color: #009900;">&#40;</span>env<span style="color: #339933;">,</span> jvm<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #666666; font-style: italic;">// 构造启动方法的参数</span>
    jstring jstringExampleArg<span style="color: #339933;">;</span>
    jclass jclassString<span style="color: #339933;">;</span>
    jobjectArray jobjectArray_args<span style="color: #339933;">;</span>
    jstringExampleArg <span style="color: #339933;">=</span> env<span style="color: #339933;">-&gt;</span>NewStringUTF<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;string1&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>jstringExampleArg <span style="color: #339933;">==</span> NULL<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        vDestroyVM<span style="color: #009900;">&#40;</span>env<span style="color: #339933;">,</span> jvm<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    jclassString <span style="color: #339933;">=</span> env<span style="color: #339933;">-&gt;</span>FindClass<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;java/lang/String&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    jobjectArray_args <span style="color: #339933;">=</span> env<span style="color: #339933;">-&gt;</span>NewObjectArray<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #339933;">,</span> jclassString<span style="color: #339933;">,</span> jstringExampleArg<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>jobjectArray_args <span style="color: #339933;">==</span> NULL<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        vDestroyVM<span style="color: #009900;">&#40;</span>env<span style="color: #339933;">,</span> jvm<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #666666; font-style: italic;">// 调用启动方法启动Java程序</span>
    env<span style="color: #339933;">-&gt;</span>CallStaticVoidMethod<span style="color: #009900;">&#40;</span>jclassStartup<span style="color: #339933;">,</span> midStartup<span style="color: #339933;">,</span> jobjectArray_args<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #666666; font-style: italic;">// 在退出之前尝试分离主线程</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>jvm<span style="color: #339933;">-&gt;</span>DetachCurrentThread<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        vShowError<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;分离主线程失败。<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #666666; font-style: italic;">// 只要还有非守护线程，下面的调用将一直被挂起</span>
    jvm<span style="color: #339933;">-&gt;</span>DestroyJavaVM<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #993333;">void</span> vDestroyVM<span style="color: #009900;">&#40;</span>JNIEnv <span style="color: #339933;">*</span>env<span style="color: #339933;">,</span> JavaVM <span style="color: #339933;">*</span>jvm<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>env<span style="color: #339933;">-&gt;</span>ExceptionOccurred<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        env<span style="color: #339933;">-&gt;</span>ExceptionDescribe<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    jvm<span style="color: #339933;">-&gt;</span>DestroyJavaVM<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> vShowError<span style="color: #009900;">&#40;</span><span style="color: #993333;">string</span> sError<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    MessageBox<span style="color: #009900;">&#40;</span>NULL<span style="color: #339933;">,</span> sError.<span style="color: #202020;">c_str</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;错误&quot;</span><span style="color: #339933;">,</span> MB_OK<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/* 在对话框中显示错误信息，括号内包含
的GetLastError错误信息 */</span>
<span style="color: #993333;">void</span> vShowLastError<span style="color: #009900;">&#40;</span><span style="color: #993333;">string</span> sLocalError<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    LPVOID lpSystemMsgBuf<span style="color: #339933;">;</span>
    FormatMessage<span style="color: #009900;">&#40;</span> FORMAT_MESSAGE_ALLOCATE_BUFFER <span style="color: #339933;">|</span>
    FORMAT_MESSAGE_FROM_SYSTEM <span style="color: #339933;">|</span> FORMAT_MESSAGE_IGNORE_INSERTS<span style="color: #339933;">,</span>
    NULL<span style="color: #339933;">,</span> GetLastError<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> MAKELANGID<span style="color: #009900;">&#40;</span>LANG_NEUTRAL<span style="color: #339933;">,</span> SUBLANG_DEFAULT<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
    <span style="color: #009900;">&#40;</span>LPTSTR<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span>lpSystemMsgBuf<span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> NULL <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #993333;">string</span> sSystemError <span style="color: #339933;">=</span> <span style="color: #993333;">string</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>LPTSTR<span style="color: #009900;">&#41;</span>lpSystemMsgBuf<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    vShowError<span style="color: #009900;">&#40;</span>sLocalError <span style="color: #339933;">+</span> <span style="color: #ff0000;">&quot; [&quot;</span> <span style="color: #339933;">+</span> sSystemError <span style="color: #339933;">+</span> <span style="color: #ff0000;">&quot;]&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> vAddOption<span style="color: #009900;">&#40;</span>string<span style="color: #339933;">&amp;</span> sValue<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    mctOptions<span style="color: #339933;">++;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>mctOptions <span style="color: #339933;">&gt;=</span> mctOptionCapacity<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>mctOptionCapacity <span style="color: #339933;">==</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            mctOptionCapacity <span style="color: #339933;">=</span> <span style="color: #0000dd;">3</span><span style="color: #339933;">;</span>
            vm_options <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>JavaVMOption<span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>malloc<span style="color: #009900;">&#40;</span>mctOptionCapacity <span style="color: #339933;">*</span> <span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span>JavaVMOption<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
            JavaVMOption <span style="color: #339933;">*</span>tmp<span style="color: #339933;">;</span>
            mctOptionCapacity <span style="color: #339933;">*=</span> <span style="color: #0000dd;">2</span><span style="color: #339933;">;</span>
            tmp <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>JavaVMOption<span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>malloc<span style="color: #009900;">&#40;</span>mctOptionCapacity <span style="color: #339933;">*</span> <span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span>JavaVMOption<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            memcpy<span style="color: #009900;">&#40;</span>tmp<span style="color: #339933;">,</span> vm_options<span style="color: #339933;">,</span> <span style="color: #009900;">&#40;</span>mctOptions<span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> <span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span>JavaVMOption<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            free<span style="color: #009900;">&#40;</span>vm_options<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            vm_options <span style="color: #339933;">=</span> tmp<span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
    vm_options<span style="color: #009900;">&#91;</span>mctOptions<span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span>.<span style="color: #202020;">optionString</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">char</span><span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>sValue.<span style="color: #202020;">c_str</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/* 如果缓冲区是&quot;c:\app\bin\java&quot;，则把&quot;c:\app&quot;放入buf。*/</span>
jboolean GetApplicationHome<span style="color: #009900;">&#40;</span><span style="color: #993333;">char</span> <span style="color: #339933;">*</span>buf<span style="color: #339933;">,</span> jint sz<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>cp<span style="color: #339933;">;</span>
    GetModuleFileName<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> buf<span style="color: #339933;">,</span> sz<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #339933;">*</span>strrchr<span style="color: #009900;">&#40;</span>buf<span style="color: #339933;">,</span> <span style="color: #ff0000;">'\<span style="color: #000099; font-weight: bold;">\'</span>) = '</span>\<span style="color: #0000dd;">0</span><span style="color: #ff0000;">';
    if ((cp = strrchr(buf, '</span>\\<span style="color: #ff0000;">')) == 0) {
        // 如果应用程序放在驱动器的根目录下，且不存在bin目录
        // 会出现这种情形
        buf[0] = '</span>\<span style="color: #0000dd;">0</span><span style="color: #ff0000;">';
        return JNI_FALSE;
    }
    return JNI_TRUE;
}</span></pre></div></div>

<p>象大多数Windows程序一样，启动器需要一个WinMain()入口。与Windows这一特定平台相关的问题，除了必要的类型转换（例如对CreateJavaVM()的转换）之外，另外一个要注意的地方就是装入VM的DLL文件。装入DLL文件最可靠的办法是显式地调用LoadLibrary()。装入JVM之后，就可以利用内核调用GetProcAddress()获得CreateJavaVM()的函数指针，然后调用该指针启动VM。<br />
注意,这里的启动类是DodoStartup,这个类并没有包路径,如果是com.voland.DodoStartup,这个串可能就得写成”com/voland/DodoStartup”,因为FindClass()是一个虚拟机调用，而虚拟机内部用斜杠作为分隔符。</p>
<p>Java程序启动后执行的第一个方法称为启动方法，通常是main()。本例通过JNI调用GetStaticMethodID()获得启动方法的ID。GetStaticMethodID()要求指定方法的名字（“main”）和方法的类型描述符（“([Ljava/lang/String;)V”）。这个类型描述符表示方法的参数是一个字符串的数组，返回值类型是void。有关类型描述符的更详细的说明，请参见JVM相关资料。注意，从这里可以看出，在使用定制启动器时，Java程序的启动方法不必一定是static void的main方法，可以用任何方法作为Java程序中第一个执行的方法，甚至包括实例方法或构造函数。</p>
<p>示例程序中最后一个需要注意的地方是jvm->DestroyJavaVM()调用。从表面看起来，这个语句似乎是程序执行后进行清理工作的方法，可有可无。其实不然，如果Java程序是多线程的，在调用这个方法时程序仍旧在运行。例如，对于一个运行着的Swing程序，如果它的main方法结束，DestroyJavaVM()的执行将被阻塞，直至所有非守护线程都执行完毕，所以这行代码是必不可少的。如果省略这行代码，则当主线程执行完毕，即使其他线程（例如Swing GUI的事件循环）仍旧在运行，整个程序也会立即退出。</p>
<p>编译这个类需要用到jdk相关jni的c头文件,通过Visual C++ 6的菜单Tools→Options打开选项对话框。在Directories标签页下添加JDK的相关目录到Include和目录下。 如下图,注意你的jdk版本与路径的修改:<br />
<div id="attachment_709" class="wp-caption aligncenter" style="width: 556px"><img src="http://www.voland.com.cn/wp-content/uploads/2011/09/bd524fdb-4ad9-3074-bebf-4896bbfad938.jpg" alt="配置jni等头文件到开发环境中" title="bd524fdb-4ad9-3074-bebf-4896bbfad938" width="546" height="384" class="size-full wp-image-709" /><p class="wp-caption-text">配置jni等头文件到开发环境中</p></div></p>
]]></content:encoded>
			<wfw:commentRss>http://www.voland.com.cn/c-calling-java-program-to-start-jvm-dll/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

