﻿<?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>IT博客-forrest</title><link>http://www.cnitblog.com/forrest/</link><description>对过去我已无法选择，但令我稍感安慰的是我还拥有现在，所以。。。。。
更弥足珍贵</description><language>zh-cn</language><lastBuildDate>Wed, 29 Apr 2026 07:11:27 GMT</lastBuildDate><pubDate>Wed, 29 Apr 2026 07:11:27 GMT</pubDate><ttl>60</ttl><item><title>Java 中的堆和栈</title><link>http://www.cnitblog.com/forrest/archive/2008/12/16/52669.html</link><dc:creator>forrest</dc:creator><author>forrest</author><pubDate>Tue, 16 Dec 2008 03:25:00 GMT</pubDate><guid>http://www.cnitblog.com/forrest/archive/2008/12/16/52669.html</guid><wfw:comment>http://www.cnitblog.com/forrest/comments/52669.html</wfw:comment><comments>http://www.cnitblog.com/forrest/archive/2008/12/16/52669.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/forrest/comments/commentRss/52669.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/forrest/services/trackbacks/52669.html</trackback:ping><description><![CDATA[


<strong></strong><br><br>简单的说：<br>Java把内存划分成两种：一种是栈内存，一种是堆内存。 <br><br>&nbsp;&nbsp;
在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。<embed src="http://www.xiami.com/widget/0_1769276040/singlePlayer.swf" type="application/x-shockwave-flash" width="257" height="33" wmode="transparent">加首歌have fun&#160;<br><br>&nbsp;&nbsp;
当在一段代码块定义一个变量时，Java就在栈中为这个变量分配内存空间，当超过变量的作用域后，Java会自动释放掉为该变量所分配的内存空间，该内存空间可以立即被另作他用。
<br><br>&nbsp;&nbsp; 堆内存用来存放由new创建的对象和数组。 <br><br>&nbsp;&nbsp; 在堆中分配的内存，由Java虚拟机的自动垃圾回收器来管理。
<br><br>&nbsp;&nbsp;
在堆中产生了一个数组或对象后，还可以在栈中定义一个特殊的变量，让栈中这个变量的取值等于数组或对象在堆内存中的首地址，栈中的这个变量就成了数组或对象的引用变量。
<br><br>&nbsp;&nbsp; 引用变量就相当于是为数组或对象起的一个名称，以后就可以在程序中使用栈中的引用变量来访问堆中的数组或对象。
<br><br><br><br>&nbsp;&nbsp; &nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;<br><br>具体的说：<br>栈与堆都是Java用来在Ram中存放数据的地方。与C++不同，Java自动管理栈和堆，程序员不能直接地设置栈或堆。
<br>&nbsp;&nbsp; &nbsp;&nbsp;
Java的堆是一个运行时数据区,类的(对象从中分配空间。这些对象通过new、newarray、anewarray和multianewarray等
指令建立，它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的，堆的优势是可以动态地分配内存大小，生存期也不必事先告诉编译器，因为它是在运行时
动态分配内存的，Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是，由于要在运行时动态分配内存，存取速度较慢。 <br>&nbsp;&nbsp; &nbsp;&nbsp;
栈的优势是，存取速度比堆要快，仅次于寄存器，栈数据可以共享。但缺点是，存在栈中的数据大小与生存期必须是确定的，缺乏灵活性。栈中主要存放一些基本
类型的变量（,int, short, long, byte, float, double, boolean, char）和对象句柄。 <br>&nbsp;&nbsp; &nbsp;&nbsp;
栈有一个很重要的特殊性，就是存在栈中的数据可以共享。假设我们同时定义： <br>int a = 3; <br>int b = 3； <br>编译器先处理int
a = 3；首先它会在栈中创建一个变量为a的引用，然后查找栈中是否有3这个值，如果没找到，就将3存放进来，然后将a指向3。接着处理int b =
3；在创建完b的引用变量后，因为在栈中已经有3这个值，便将b直接指向3。这样，就出现了a与b同时均指向3的情况。这时，如果再令a=4；那么编译器
会重新搜索栈中是否有4值，如果没有，则将4存放进来，并令a指向4；如果已经有了，则直接将a指向这个地址。因此a值的改变不会影响到b的值。要注意这
种数据的共享与两个对象的引用同时指向一个对象的这种共享是不同的，因为这种情况a的修改并不会影响到b,
它是由编译器完成的，它有利于节省空间。而一个对象引用变量修改了这个对象的内部状态，会影响到另一个对象引用变量。
<br><br>String是一个特殊的包装类数据。可以用： <br>String str = new String("abc"); <br>String
str = "abc"; <br>两种的形式来创建，第一种是用new()来新建对象的，它会在存放于堆中。每调用一次就会创建一个新的对象。
<br>而第二种是先在栈中创建一个对String类的对象引用变量str，然后查找栈中有没有存放"abc"，如果没有，则将"abc"存放进栈，并令str指向&#8221;abc&#8221;，如果已经有&#8221;abc&#8221;
则直接令str指向&#8220;abc&#8221;。 <br><br>&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
比较类里面的数值是否相等时，用equals()方法；当测试两个包装类的引用是否指向同一个对象时，用==，下面用例子说明上面的理论。 <br>String
str1 = "abc"; <br>String str2 = "abc"; <br>System.out.println(str1==str2);
//true <br>可以看出str1和str2是指向同一个对象的。 <br><br>String str1 =new String ("abc");
<br>String str2 =new String ("abc"); <br>System.out.println(str1==str2); //
false <br>用new的方式是生成不同的对象。每一次生成一个。 <br>&nbsp;&nbsp; 因此用第二种方式创建多个&#8221;abc&#8221;字符串,在内存中其实只存在一个对象而已.
这种写法有利与节省内存空间. 同时它可以在一定程度上提高程序的运行速度，因为JVM会自动根据栈中数据的实际情况来决定是否有必要创建新对象。而对于String
str = new String("abc")；的代码，则一概在堆中创建新对象，而不管其字符串值是否相等，是否有必要创建新对象，从而加重了程序的负担。
<br>&nbsp;&nbsp; 另一方面, 要注意: 我们在使用诸如String str =
"abc"；的格式定义类时，总是想当然地认为，创建了String类的对象str。担心陷阱！对象可能并没有被创建！而可能只是指向一个先前已经创建的
对象。只有通过new()方法才能保证每次都创建一个新的对象。
由于String类的immutable性质，当String变量需要经常变换其值时，应该考虑使用StringBuffer类，以提高程序效率。<br><br><br><br><br>java中内存分配策略及堆和栈的比较
<br>2.1 内存分配策略 <br>按照编译原理的观点,程序运行时的内存分配有三种策略,分别是静态的,栈式的,和堆式的.
<br>静态存储分配是指在编译时就能确定每个数据目标在运行时刻的存储空间需求,因而在编译时就可以给他们分配固定的内存空间.这种分配策略要求程序代码中不允
许有可变数据结构(比如可变数组)的存在,也不允许有嵌套或者递归的结构出现,因为它们都会导致编译程序无法计算准确的存储空间需求.
<br>栈式存储分配也可称为动态存储分配,是由一个类似于堆栈的运行栈来实现的.和静态存储分配相反,在栈式存储方案中,程序对数据区的需求在编译时是完全未知
的,只有到运行的时候才能够知道,但是规定在运行中进入一个程序模块时,必须知道该程序模块所需的数据区大小才能够为其分配内存.和我们在数据结构所熟知
的栈一样,栈式存储分配按照先进后出的原则进行分配。
<br>静态存储分配要求在编译时能知道所有变量的存储要求,栈式存储分配要求在过程的入口处必须知道所有的存储要求,而堆式存储分配则专门负责在编译时或运行时
模块入口处都无法确定存储要求的数据结构的内存分配,比如可变长度串和对象实例.堆由大片的可利用块或空闲块组成,堆中的内存可以按照任意顺序分配和释 放.
<br><br>2.2 堆和栈的比较
<br>上面的定义从编译原理的教材中总结而来,除静态存储分配之外,都显得很呆板和难以理解,下面撇开静态存储分配,集中比较堆和栈:
<br>从堆和栈的功能和作用来通俗的比较,堆主要用来存放对象的，栈主要是用来执行程序的.而这种不同又主要是由于堆和栈的特点决定的:
<br>在编程中，例如C/C++中，所有的方法调用都是通过栈来进行的,所有的局部变量,形式参数都是从栈中分配内存空间的。实际上也不是什么分配,只是从栈顶
向上用就行,就好像工厂中的传送带(conveyor belt)一样,Stack
Pointer会自动指引你到放东西的位置,你所要做的只是把东西放下来就行.退出函数的时候，修改栈指针就可以把栈中的内容销毁.这样的模式速度最快,
当然要用来运行程序了.需要注意的是,在分配的时候,比如为一个即将要调用的程序模块分配数据区时,应事先知道这个数据区的大小,也就说是虽然分配是在程
序运行时进行的,但是分配的大小多少是确定的,不变的,而这个"大小多少"是在编译时确定的,不是在运行时.
<br>堆是应用程序在运行的时候请求操作系统分配给自己内存，由于从操作系统管理的内存分配,所以在分配和销毁时都要占用时间，因此用堆的效率非常低.但是堆的
优点在于,编译器不必知道要从堆里分配多少存储空间，也不必知道存储的数据要在堆里停留多长的时间,因此,用堆保存数据时会得到更大的灵活性。事实上,面
向对象的多态性,堆内存分配是必不可少的,因为多态变量所需的存储空间只有在运行时创建了对象之后才能确定.在C++中，要求创建一个对象时，只需用
new命令编制相关的代码即可。执行这些代码时，会在堆里自动进行数据的保存.当然，为达到这种灵活性，必然会付出一定的代价:在堆里分配存储空间时会花
掉更长的时间！这也正是导致我们刚才所说的效率低的原因,看来列宁同志说的好,人的优点往往也是人的缺点,人的缺点往往也是人的优点(晕~).
<br><br><br>2.3 JVM中的堆和栈
<br>JVM是基于堆栈的虚拟机.JVM为每个新创建的线程都分配一个堆栈.也就是说,对于一个Java程序来说，它的运行就是通过对堆栈的操作来完成的。堆栈以帧为单位保存线程的状态。JVM对堆栈只进行两种操作:以帧为单位的压栈和出栈操作。
<br>我们知道,某个线程正在执行的方法称为此线程的当前方法.我们可能不知道,当前方法使用的帧称为当前帧。当线程激活一个Java方法,JVM就会在线程的
Java堆栈里新压入一个帧。这个帧自然成为了当前帧.在此方法执行期间,这个帧将用来保存参数,局部变量,中间计算过程和其他数据.这个帧在这里和编译
原理中的活动纪录的概念是差不多的.
<br>从Java的这种分配机制来看,堆栈又可以这样理解:堆栈(Stack)是操作系统在建立某个进程时或者线程(在支持多线程的操作系统中是线程)为这个线程建立的存储区域，该区域具有先进后出的特性。
<br>每一个Java应用都唯一对应一个JVM实例，每一个实例唯一对应一个堆。应用程序在运行中所创建的所有类实例或数组都放在这个堆中,并由应用所有的线程
共享.跟C/C++不同，Java中分配堆内存是自动初始化的。Java中所有对象的存储空间都是在堆中分配的，但是这个对象的引用却是在堆栈中分配,也
就是说在建立一个对象时从两个地方都分配内存，在堆中分配的内存实际建立这个对象，而在堆栈中分配的内存只是一个指向这个堆对象的指针(引用)而已。<br>2.4
GC的思考<br>Java为什么慢?JVM的存在当然是一个原因,但有人说,在Java中,除了简单类型(int,char等)的数据结构,其它都是在堆中分配内存(所以说Java的一切都是对象)，这也是程序慢的原因之一。<br>我的想法是(应该说代表TIJ的观点),如果没有Garbage
Collector(GC),上面的说法就是成立的.堆不象栈是连续的空间,没有办法指望堆本身的内存分配能够象堆栈一样拥有传送带般的速度,因为,谁会
为你整理庞大的堆空间,让你几乎没有延迟的从堆中获取新的空间呢?<br>这个时候,GC站出来解决问题.我们都知道GC用来清除内存垃圾,为堆腾出空间供程序使用,但GC同时也担负了另外一个重要的任务,就是要让Java中堆
的内存分配和其他语言中堆栈的内存分配一样快,因为速度的问题几乎是众口一词的对Java的诟病.要达到这样的目的,就必须使堆的分配也能够做到象传送带
一样,不用自己操心去找空闲空间.这样,GC除了负责清除Garbage外,还要负责整理堆中的对象,把它们转移到一个远离Garbage的纯净空间中无
间隔的排列起来,就象堆栈中一样紧凑,这样Heap
Pointer就可以方便的指向传送带的起始位置,或者说一个未使用的空间,为下一个需要分配内存的对象"指引方向".因此可以这样说,垃圾收集影响了对
象的创建速度,听起来很怪,对不对?<br>那GC怎样在堆中找到所有存活的对象呢?前面说了,在建立一个对象时，在堆中分配实际建立这个对象的内存,而在堆栈中分配一个指向这个堆对象的指针(引
用),那么只要在堆栈(也有可能在静态存储区)找到这个引用,就可以跟踪到所有存活的对象.找到之后,GC将它们从一个堆的块中移到另外一个堆的块中,并
将它们一个挨一个的排列起来,就象我们上面说的那样,模拟出了一个栈的结构,但又不是先进后出的分配,而是可以任意分配的,在速度可以保证的情况下, Isn't it
great?<br>但是，列宁同志说了,人的优点往往也是人的缺点,人的缺点往往也是人的优点(再晕~~).GC()的运行要占用一个线程,这本身就是一个降低程序运行性能
的缺陷,更何况这个线程还要在堆中把内存翻来覆去的折腾.不仅如此,如上面所说,堆中存活的对象被搬移了位置,那么所有对这些对象的引用都要重新赋值.这
些开销都会导致性能的降低.<br><br>
<p>基础数据类型直接在栈空间分配，方法的形式参数，直接在栈空间分配，当方法调用完成后从栈空间回收。引用数据类型，需要用new来创建，既在栈空间
分配一个地址空间，又在堆空间分配对象的类变量
。方法的引用参数，在栈空间分配一个地址空间，并指向堆空间的对象区，当方法调用完成后从栈空间回收。局部变量new出来时，在栈空间和堆空间中分配空
间，当局部变量生命周期结束后，栈空间立刻被回收，堆空间区域等待GC回收。方法调用时传入的literal参数，先在栈空间分配，在方法调用完成后从栈
空间分配。字符串常量在DATA区域分配，this在堆空间分配。数组既在栈空间分配数组名称，又在堆空间分配数组实际的大小！</p>
<p><strong>哦 对了，补充一下static在DATA区域分配。</strong></p>
<p>其实是有规律的，只要你理解了这些个基本的原理：</p>
<p><strong>堆空间的话</strong>：操作系统有一个记录空闲内存地址的链表，当系统收到程序的申请时，会遍历该链表，寻找第一个空间大
于所申请空间的堆结点，然后将该结点从空闲结点链表中删除，并将该结点的空间分配给程序。另外，对于大多数系统，会在这块内存空间中的首地址处记录本次分
配的大小，这样代码中的delete语句才能正确的释放本内存空间。另外由于找到的堆结点的大小不一定正好等于申请的大小，系统会自动的将多余的那部分重
新放入空闲链表中。是由new分配的内存，一般速度比较慢，而且容易产生内存碎片，不过用起来最方便。另外，在WINDOWS下，最好的方式是用
VirtualAlloc分配内存，他不是在堆，也不是在栈是直接在进程的地址空间中保留一快内存，虽然用起来最不方便。但是速度快，也最灵活。是向高地
址扩展的数据结构，是不连续的内存区域。这是由于系统是用链表来存储的空闲内存地址的，自然是不连续的，而链表的遍历方向是由低地址向高地址。堆的大小受
限于计算机系统中有效的虚拟内存。由此可见，堆获得的空间比较灵活，也比较大。</p>
<p><strong>栈空间的话</strong>：在Windows下,
栈是向低地址扩展的数据结构，是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的，在WINDOWS下，栈的大小是固定
的（是一个编译时就确定的常数），如果申请的空间超过栈的剩余空间时，将提示overflow。因此，能从栈获得的空间较小。只要栈的剩余空间大于所申请
空间，系统将为程序提供内存，否则将报异常提示栈溢出。 由系统自动分配，速度较快。但程序员是无法控制的。</p>
<p><strong>JVM中的堆和栈</strong></p>
<p>JVM是基于堆栈的虚拟机。JVM为每个新创建的线程都分配一个堆栈。也就是说，对于一个Java程序来说，它的运行就是通过对堆栈的操作来完成的。堆栈以帧为单位保存线程的状态。JVM对堆栈只进行两种操作:以帧为单位的压栈和出栈操作。</p>
<p>我们知道，某个线程正在执行的方法称为此线程的当前方法。我们可能不知道，当前方法使用的帧称为当前帧。当线程激活一个Java方法，JVM就会在
线程的Java堆栈里新压入一个帧。这个帧自然成为了当前帧.在此方法执行期间，这个帧将用来保存参数，局部变量，中间计算过程和其他数据。这个帧在这里
和编译原理中的活动纪录的概念是差不多的。</p>
<p>从Java的这种分配机制来看,堆栈又可以这样理解：堆栈(Stack)是操作系统在建立某个进程时或者线程(在支持多线程的操作系统中是线程)为这个线程建立的存储区域，该区域具有先进后出的特性。</p>
<p>每一个Java应用都唯一对应一个JVM实例，每一个实例唯一对应一个堆。应用程序在运行中所创建的所有类实例或数组都放在这个堆中，并由应用所有
的线程共享。跟C/C++不同，Java中分配堆内存是自动初始化的。Java中所有对象的存储空间都是在堆中分配的，但是这个对象的引用却是在堆栈中分
配,也就是说在建立一个对象时从两个地方都分配内存，在堆中分配的内存实际建立这个对象，而在堆栈中分配的内存只是一个指向这个堆对象的指针(引用)而 已。</p><img src ="http://www.cnitblog.com/forrest/aggbug/52669.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/forrest/" target="_blank">forrest</a> 2008-12-16 11:25 <a href="http://www.cnitblog.com/forrest/archive/2008/12/16/52669.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hello google</title><link>http://www.cnitblog.com/forrest/archive/2008/12/01/52128.html</link><dc:creator>forrest</dc:creator><author>forrest</author><pubDate>Mon, 01 Dec 2008 14:25:00 GMT</pubDate><guid>http://www.cnitblog.com/forrest/archive/2008/12/01/52128.html</guid><wfw:comment>http://www.cnitblog.com/forrest/comments/52128.html</wfw:comment><comments>http://www.cnitblog.com/forrest/archive/2008/12/01/52128.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/forrest/comments/commentRss/52128.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/forrest/services/trackbacks/52128.html</trackback:ping><description><![CDATA[<title>&nbsp; &nbsp; &nbsp; Cinematics&nbsp; &nbsp; </title>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <style type="text/css">&#160; &#160; &#160; .header {&#160; &#160; &#160; &#160; color: purple;&#160; &#160; &#160; &#160; background-color: #abc;&#160; &#160; &#160; &#160; font-size: 40px;&#160; &#160; &#160; &#160; text-align: center;&#160; &#160; &#160; }&#160; &#160; </style>&nbsp; &nbsp; <script type="text/javascript" src="http://www.google.com/jsapi"></script>&nbsp; &nbsp; <!-- Note that you need to replace the key ABCDEF with your Maps API key. -->&nbsp; &nbsp; <!-- Sign up for a Maps API key here: http://code.google.com/apis/maps/signup.html -->&nbsp; &nbsp; <script src="http://maps.google.com/maps?file=api&v=2&api;key=ABCDEF"&#160; &#160; &#160; type="text/javascript"></script>&nbsp; &nbsp; <script type="text/javascript">&#160; &#160; &#160; google.load('visualization', '1',&#160; &#160; &#160; &#160; &#160; {packages: ['table', 'map', 'columnchart']});&#160; &#160; &#160; google.setOnLoadCallback(initialize);&#160; &#160; &#160; function initialize() {&#160; &#160; &#160; &#160; // The URL here is the URL of the spreadsheet.&#160; &#160; &#160; &#160; // This is where the data is.&#160; &#160; &#160; &#160; var query = new google.visualization.Query(&#160; &#160; &#160; &#160; &#160; &#160; 'http://spreadsheets.google.com/pub?key=pCQbetd-CptF0r8qmCOlZGg');&#160; &#160; &#160; &#160; query.send(draw);&#160; &#160; &#160; }&#160; &#160; &#160; function draw(response) {&#160; &#160; &#160; &#160; if (response.isError()) {&#160; &#160; &#160; &#160; &#160; alert('Error in query')&#160; &#160; &#160; &#160; }&#160; &#160; &#160; &#160; var ticketsData = response.getDataTable();&#160; &#160; &#160; &#160; var chart = new google.visualization.ColumnChart(&#160; &#160; &#160; &#160; &#160; &#160; document.getElementById('chart_div'));&#160; &#160; &#160; &#160; chart.draw(ticketsData, {'isStacked': true, 'legend': 'bottom',&#160; &#160; &#160; &#160; &#160; &#160; 'titleY': 'Number of tickets'});&#160; &#160; &#160; &#160; var geoData = new google.visualization.DataTable();&#160; &#160; &#160; &#160; geoData.addColumn('string', 'City');&#160; &#160; &#160; &#160; geoData.addColumn('string', 'Name');&#160; &#160; &#160; &#160; geoData.addColumn('boolean', 'Food');&#160; &#160; &#160; &#160; geoData.addRows(3);&#160; &#160; &#160; &#160; geoData.setCell(0, 0, 'London');&#160; &#160; &#160; &#160; geoData.setCell(1, 0, 'Paris');&#160; &#160; &#160; &#160; geoData.setCell(2, 0, 'Moscow');&#160; &#160; &#160; &#160; geoData.setCell(0, 1, 'Cinematics London');&#160; &#160; &#160; &#160; geoData.setCell(1, 1, 'Cinematics Paris');&#160; &#160; &#160; &#160; geoData.setCell(2, 1, 'Cinematics Moscow');&#160; &#160; &#160; &#160; geoData.setCell(0, 2, true);&#160; &#160; &#160; &#160; geoData.setCell(1, 2, true);&#160; &#160; &#160; &#160; geoData.setCell(2, 2, false);&#160; &#160; &#160; &#160; var geoView = new google.visualization.DataView(geoData);&#160; &#160; &#160; &#160; geoView.setColumns([0, 1]);&#160; &#160; &#160; &#160; var table =&#160; &#160; &#160; &#160; &#160; &#160; new google.visualization.Table(document.getElementById('table_div'));&#160; &#160; &#160; &#160; table.draw(geoData, {showRowNumber: false});&#160; &#160; &#160; &#160; var map =&#160; &#160; &#160; &#160; &#160; &#160; new google.visualization.Map(document.getElementById('map_div'));&#160; &#160; &#160; &#160; map.draw(geoView, {showTip: true});&#160; &#160; &#160; &#160; // Set a 'select' event listener for the table.&#160; &#160; &#160; &#160; // When the table is selected,&#160; &#160; &#160; &#160; // we set the selection on the map.&#160; &#160; &#160; &#160; google.visualization.events.addListener(table, 'select',&#160; &#160; &#160; &#160; &#160; &#160; function() {&#160; &#160; &#160; &#160; &#160; &#160; &#160; map.setSelection(table.getSelection());&#160; &#160; &#160; &#160; &#160; &#160; });&#160; &#160; &#160; &#160; // Set a 'select' event listener for the map.&#160; &#160; &#160; &#160; // When the map is selected,&#160; &#160; &#160; &#160; // we set the selection on the table.&#160; &#160; &#160; &#160; google.visualization.events.addListener(map, 'select',&#160; &#160; &#160; &#160; &#160; &#160; function() {&#160; &#160; &#160; &#160; &#160; &#160; &#160; table.setSelection(map.getSelection());&#160; &#160; &#160; &#160; &#160; &#160; });&#160; &#160; &#160; }&#160; &#160; </script>&nbsp; &nbsp; &nbsp; &nbsp;
<div class="header">Cinematics</div>
&nbsp; &nbsp;
<table align="center">
    &nbsp; &nbsp; &nbsp;
    <tbody>
        <tr valign="top">
            &nbsp; &nbsp; &nbsp; &nbsp;
            <td style="border: 1px dashed #7f7c75; width: 50%;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
            <div id="map_div" style="width: 400px; height: 300px;"></div>
            &nbsp; &nbsp; &nbsp; &nbsp; </td>
            &nbsp; &nbsp; &nbsp; &nbsp;
            <td style="border: 1px dashed #7f7c75; width: 50%;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
            <div id="table_div"></div>
            &nbsp; &nbsp; &nbsp; &nbsp; </td>
            &nbsp; &nbsp; &nbsp;
        </tr>
        &nbsp; &nbsp; &nbsp;
        <tr>
            &nbsp; &nbsp; &nbsp; &nbsp;
            <td style="border: 1px dashed #7f7c75;" colspan="2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
            <div id="chart_div" style="width: 700px; height: 300px;"></div>
            &nbsp; &nbsp; &nbsp; &nbsp; </td>
            &nbsp; &nbsp; &nbsp;
        </tr>
        &nbsp; &nbsp;
    </tbody>
</table>
&nbsp; <img src ="http://www.cnitblog.com/forrest/aggbug/52128.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/forrest/" target="_blank">forrest</a> 2008-12-01 22:25 <a href="http://www.cnitblog.com/forrest/archive/2008/12/01/52128.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ntsdr missing 解决</title><link>http://www.cnitblog.com/forrest/archive/2008/08/11/47886.html</link><dc:creator>forrest</dc:creator><author>forrest</author><pubDate>Mon, 11 Aug 2008 01:23:00 GMT</pubDate><guid>http://www.cnitblog.com/forrest/archive/2008/08/11/47886.html</guid><wfw:comment>http://www.cnitblog.com/forrest/comments/47886.html</wfw:comment><comments>http://www.cnitblog.com/forrest/archive/2008/08/11/47886.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/forrest/comments/commentRss/47886.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/forrest/services/trackbacks/47886.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 昨天刚装的机器，把一个盗版的卡巴卸了后，同时删除&#215;&#215;&#215;的数据流，结果机器起不来了。到网上找办法，按网上一哥们的办法，把自己能用的那台笔记本上的ntsdr 文件拷到了那台不能起来的台式机上（至于怎么考过去，方法很多，自己到网上找吧）的相同位置，结果还是不能用。现在手头只有一张那种装机盘 ，没有具有进入修复控制台的那种XP安装盘，于是直接在c盘下换个目录装xp，装到开始拷系统文件 时，我就把它停掉了，再重启机器，（用引导盘）进入原来的老系统，这时发现C盘目录下已经有隐藏的ntsdr文件了。再修改一下boot.in文件，把系统文件路径改到老的那个，然后重启。不需要引导盘就可以正常启动。反复重启两次，都成功了。小小窃喜一下，呵呵！<br>&nbsp;&nbsp;&nbsp;&nbsp; windows的启动模式还是比较简单的。原理还是翻照linux的。鄙视一下<br><img src ="http://www.cnitblog.com/forrest/aggbug/47886.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/forrest/" target="_blank">forrest</a> 2008-08-11 09:23 <a href="http://www.cnitblog.com/forrest/archive/2008/08/11/47886.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>还是北京的大妈实在</title><link>http://www.cnitblog.com/forrest/archive/2008/08/06/47721.html</link><dc:creator>forrest</dc:creator><author>forrest</author><pubDate>Wed, 06 Aug 2008 15:41:00 GMT</pubDate><guid>http://www.cnitblog.com/forrest/archive/2008/08/06/47721.html</guid><wfw:comment>http://www.cnitblog.com/forrest/comments/47721.html</wfw:comment><comments>http://www.cnitblog.com/forrest/archive/2008/08/06/47721.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/forrest/comments/commentRss/47721.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/forrest/services/trackbacks/47721.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 今天看到凤凰卫视的北京奥运采访，记者对北京的一些居民进行了采访，希望他们谈谈奥运对他们日常生活的影响。一大妈无意间说出了一大实话：<br>&nbsp;&nbsp;&nbsp; （J：记者 dm：大妈）<br>J：大妈您能谈谈这奥运会对于咱们普通市民日常生活的影响吗？<br>dm：这肯定有影响啊，你想啊，有时候这是会让人感觉不方便的<br>J：大妈您能谈谈具体的感受吗？<br>（这时大妈不知是走神了，还是怎么的，半天回过神来，似乎是努力想着这具体的内容。。。可实际上）<br>dm：你看啊，今年咱们国家是多灾多难的，年初南方那个冰。。。冰把电线都压断了，对！这是冰灾（谢谢大妈，您终于说出一概括性的词了，前面太具体啦）。接着四川大地震的，死了那么多人，现在吧，又奥运了。。。唉（大妈，您这联系也太紧密了，终于说出北京市民的心声啦，真是神来之语）<br>J（一时找不到词来接只好）：是啊，是啊，谢谢您大妈<br><br>听到这里我已经笑翻了。感觉：凤凰卫视的编导真的有一定的水平，呵呵！<br><br><img src ="http://www.cnitblog.com/forrest/aggbug/47721.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/forrest/" target="_blank">forrest</a> 2008-08-06 23:41 <a href="http://www.cnitblog.com/forrest/archive/2008/08/06/47721.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>24周岁生日记</title><link>http://www.cnitblog.com/forrest/archive/2008/07/20/46944.html</link><dc:creator>forrest</dc:creator><author>forrest</author><pubDate>Sun, 20 Jul 2008 06:12:00 GMT</pubDate><guid>http://www.cnitblog.com/forrest/archive/2008/07/20/46944.html</guid><wfw:comment>http://www.cnitblog.com/forrest/comments/46944.html</wfw:comment><comments>http://www.cnitblog.com/forrest/archive/2008/07/20/46944.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/forrest/comments/commentRss/46944.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/forrest/services/trackbacks/46944.html</trackback:ping><description><![CDATA[ 写给自己的：
     现在发现过去的事情越来越记不清楚了。生活中有意思的事情越来越少了。自己的生活太平面化了，没有多少值得回味的事情。
但是，这应该不是我在生活中向前跑的太快的缘故，应该是跑的还不够快。如果爱因斯坦的四维空间存在，那么我想如果你跑的更快些，时间作为横轴所承担的空间纵轴的事情就会更多，就好像你会在一列高速行驶的列车上，望着身后向后飞去的牛车，单位的时间内，你会比他看到的更多，也同时感到更充实的多。
    一点忠告：做人要实在，不但是对别人，更要对自己。<img src ="http://www.cnitblog.com/forrest/aggbug/46944.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/forrest/" target="_blank">forrest</a> 2008-07-20 14:12 <a href="http://www.cnitblog.com/forrest/archive/2008/07/20/46944.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>敛气</title><link>http://www.cnitblog.com/forrest/archive/2008/03/08/40682.html</link><dc:creator>forrest</dc:creator><author>forrest</author><pubDate>Sat, 08 Mar 2008 13:55:00 GMT</pubDate><guid>http://www.cnitblog.com/forrest/archive/2008/03/08/40682.html</guid><wfw:comment>http://www.cnitblog.com/forrest/comments/40682.html</wfw:comment><comments>http://www.cnitblog.com/forrest/archive/2008/03/08/40682.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/forrest/comments/commentRss/40682.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/forrest/services/trackbacks/40682.html</trackback:ping><description><![CDATA[作为一个即将24岁的单身男人，今天终于为自己这些天来的那种镇定与安静的感觉的正确性，为一个23岁男孩成长为24岁男人的找到了类似的理论依据。喜欢一个女孩，原来是要这样去追求的。一则笑话说的好：如果做一个有上进心的男人：看到他很有钱，那么就比他更有钱；看到他很风趣，那就比他更幽默；如果他很潇洒，那就要比他更潇洒；如果他很博学，那就要比他看更多的书，走更多的&#8220;路&#8221;。可是，如果他很英俊，那么你最好早点把它毁容。残忍？不过是个夸张的说法罢了。<br>（不，这样才叫残忍，是男人，就打断他三条腿，是公狗就打断他五条腿。）可见，除了自己天生的外在条件很难改变，那么提升自己的内在修养-----敛气，确实很重要。追求自己心意的女孩，既可以看作一项充满小聪明的技术，那么也是一个人在自己既当观众又当演员的独角戏的剧本的修改，你要不断的审视自己，不断的挖掘自己，相信自己，激励自己，鞭策自己，充实自己。当你准备好了，这出独角戏一定会吸引到最欣赏你的观众的。以下是我的引用内容：<br>&nbsp;&nbsp;&nbsp; 《献给所有单身男人》一位女生写的追mm秘计：我是女生，看到有的男生想追自己喜欢的女孩子又不敢追，还想人家倒追他，我很反感. 从一个女生的角度，我比较了解女孩子的心理。女孩子大多不会主动出击，去追求自己喜欢的男孩，除了确实太喜欢了或者是那种比较有个性的勇敢的女孩子。所以，如果你很喜欢一个女孩子，并且认为她对你也有点意思，那就主动点，别跟她搞拉锯战，自己难受，说不定你喜欢的人也痛苦。 任何一个女孩子在被人追的时候，心理都是很复杂的。她也许很开心，但是又带着点惶恐，她对这个闯进自己平静的生活的男孩子，有着欲拒还迎的矛盾心理，她不是故意的。不要以为她在考验你，她其实也在和自己斗争，她怕受到伤害。 不要怕你的主动会带来她的反感，你不主动，她也不主动，也就慢慢淡下来了。如果你开始的表白被她拒绝，那也很正常呀。不要气馁，谁知道这个女孩子心里在想什么呢？ 也许你再表白两次，她就会被你打动，一个心地善良的好女孩是很容易感动的。 如果你受到一次挫折，就立刻离开，再也不去答理这个女孩，把自己紧紧地保护起来，默默地舔舐伤口，在你痛苦的同时，殊不知，那个女孩子也许也正在心里遗憾、后悔呢！也许她会偷偷哭泣，后悔拒绝了你，再看到你漠然的眼神，她也很痛心，但是她却不会对你说，绝对不会请求你回来追她。你的过度的自尊心，可能会伤害了女孩子敏感的心。 她会认为你不是真诚的喜欢他，要不怎么会就这么放弃了她？ 有人说，男生真难，追女孩子太不容易了。可是我的感觉却是，这种现象跟男人和女人的社会角色定位是分不开的，从生理和社会的角度，女人总是被动的。如果反过来,让男人都脉脉含羞，女人变得勇往直前，世界才乱了套呢！女人的羞涩总是美好的、动人的呀~我总是听说是某个勇敢的男人战胜了多少困难，最终获得佳人芳心。相反的例子却少得很。 有的男生，就怕别人说自己什么死缠烂打，落下不好的名声。可是我觉得男生追求自己喜欢的女孩子，受了点挫折还继续对这个女孩子好，说明人家确实很喜欢，很有诚意，如果没成功，也不遗憾，并没什么啊？谁让人家喜欢了？最讨厌别人跟着瞎掺乎，也最讨厌那种自己没主意，过于在乎别人对自己看法的男生，活该这种男生找不到女朋友。 是男人就勇敢点，女孩子本来就感性，容易沉浸在爱情里。虽然你付出了辛苦，而一旦你的真心打动了她，那么你得到的将是更多更久的加倍的爱。这样的例子，在身边比比皆是。女孩子对自己的男朋友都是很温柔很贴心的，为了换来这份甜蜜，开头的辛苦算什么啊？而且大多好女孩都爱得挺投入挺专一的。 所以，建议有的男生勇敢一点，去追求自己喜欢的女孩子，不要那么畏畏缩缩，一来是让人觉得你没男人气概，二来是你自己怪难受的，然而最最最重要的还是：最后你什么都得不到。幸福总是自己挣来的，别指望别人施舍给你！ 再补充一句，我觉得主动点儿挺好的，因为你的目标是你自己真心喜欢的，女孩子往往被动，被动的只能选择接受和拒绝，所以我宁愿主动出击，爱我所爱，无怨无悔！ －－－－－人生很美好，快乐在其中，要学会寻找! 一、应该给mm留下什么样的第一印象（时间：刚开始接触mm） 1、我认为最关键的，是要让mm看到你的上进心。 男人的最大魅力在于事业有成，年轻人工作时间不长谈不上&#8220;有成&#8221;，这时候你就要让mm觉得你是个有上进心的人。 别的可以胡说八道，但这个问题不能含糊，你一定要告诉mm，你对未来充满信心，你不满足于现状，并且你已经有了长远的计划，总之你的未来不是梦。 2、要显得有信心、有责任心 不要像个小孩子，女孩子都很懒希望能找个依靠，你要拿出自己的信心和责任心来。 有一个错的选择总比没有选择要好的多。 3、不要太正经，但也不要太随便 该正经的地方就正经，该调侃的的时候就调侃。 女孩子都喜欢有点玩世不恭的男人，所以别显得对什么都特别在意，那样太呆板。 4、显得成熟一点 遇事镇定、从容不迫的男人对mm有致命的吸引力。 二、如何与mm展开进一步接触（时间：开始追的阶段） 1、这个阶段最关键的是不能着急，不要把事情弄的那么清楚，让人家一眼就能看出你在追人家。 想一想，一般人都不会一眼就看上你，但也不会看一眼就讨厌你，都是老百姓家的孩子（除非你长得象周润发刘德华或者凯文科斯特纳），好感是需要随着了解的不断增加而实现的，所以问题的关键是你要得的进一步发展的机会。 站在女孩子的角度替人家想一想：你这么直接了当的冲过来要搞对象，女孩子肯定有心理压力。这要是接触一阵后发现不喜欢你，那不就成了耍你了么？所以如果你开始就摆出志在必得的姿势出来，基本上会被立刻闷回去。 2、要低姿态起步 首先要把关系定位成&#8220;朋友&#8221;，本来是&#8220;普通朋友&#8221;，你希望成为&#8220;好朋友&#8221;，有品位的还可以要求对方成为&#8220;红颜知己&#8221;什么的，总之千万不要说&#8220;追你&#8221;。 你想想，你如果根本不提&#8220;追&#8221;，那么女孩子也就更没机会&#8220;拒绝&#8221;你——你没追她怎么拒绝你？！ 这样可以减轻女孩子的心理压力，使你们能顺利的交往下去。不要幻想认识三天就答应嫁给你，要充分的交往、了解，感情不是凭空产生的。 3、交往的过程中不要太急躁 要有张有弛，不要整天缠着人家，谁这样对你，你也会腻。我有个好朋友对我说，追女孩子的关键是八个字——&#8220;忽冷忽热、欲擒故纵&#8221;（这是我同学多少年心血的结晶）。 你整天缠着人家自然不觉得你好，你适当的冷个一两天，女孩子就会想起你在的好处了。 还有就是不要拿出&#8220;非你不娶&#8221;的志气来，太掉价了不好，有时候可以耍点花招。 4、要适当的创造机会 前面说了，不要使事情立刻变成&#8220;你在追别人&#8221;，而你又需要得到接近女孩子的机会，这时就要看你的创造力了。 你可以搜集情报，想办法把守株待兔变成一场邂逅；也可以装做漫不经心的找出最最充足的理由邀请对方和你一起做什么事。 总之这个是最有技术含量的地方，实在不行可以找前辈请教。 5、切忌切忌：随便送人家礼物是不礼貌的 有些人追女孩子心切，喜欢经常买东西送人家，殊不知追女孩子最忌讳这个。 俗话说&#8220;无功不受禄&#8221;，你这样送人家东西就是在施加压力，人家会觉得欠你的，所以会想办法还给你，如果没办法还给你就会想办法不和你交往，免得总是欠你人情。 如果你想显示自己的诚意，倒不妨请女孩子一起消费，比如说找好的餐厅吃饭，或者找贵的地方一起玩什么的，女孩子自然能看出你花了很多钱，但钱终究是两个人一起花了而不是变成东西带回家。 三、&#8220;女朋友&#8221;到底是什么？ 1、&#8220;女朋友&#8221;是一种事实，而不是一份承诺 你和女孩子开始交往，从&#8220;普通朋友&#8221;变成&#8220;好朋友&#8221;，再到&#8220;非常非常好、无话不谈的朋友&#8221;，某一个阳光灿烂的午后，你&#8220;不小心&#8221;拉了她的手；&#8220;月上柳梢头&#8221;，你突然袭击吻了她。这时她就已经是你的女朋友了，无论她是否承认，她心理已经认为你是他男朋友了。 我知道最高明的，直到上床了都没问过&#8220;你是否愿意做我女朋友&#8221;，最后还是女孩子急了：&#8220;你怎么还不求我做你女朋友啊！&#8221; 所以说，千万不要急于把窗户纸捅破，情况越朦胧对你越有利。 2、&#8220;表白&#8221;是什么？ 前面说了，表白实际上就是一个形式而已，正确的顺序应该是：事实上已经成为你女朋友了，你才能向人家表白，水到渠成。很多人弄不明白这个问题，总以为人家先答应做自己女朋友，然后再如何如何，我只能说非常非常&#8220;单纯&#8221;，也非常非常&#8220;愚蠢&#8221;。 3、有没有&#8220;迫不得已非表白不可&#8221;的时候？ 有，比如说出现第三者，或者你和女孩子关系没有成熟但两个人可能分开一段时间。 这时候的表白就是条件不成熟的表白，风险非常大，类似于下围棋的时候形势严峻，落後的一方迫于无奈放出&#8220;胜负手&#8221;，赢了就赢了，输了也只能说&#8220;倒霉都是天生的&#8221;。 4、&#8220;爱&#8221;字不要轻易出口 经常看见论坛出现&#8220;大胆的表白&#8221;，说实话我真的认为这是非常不成熟的一种表现。&#8220;爱&#8221;是一个神圣的字，意味着追求，也意味着承诺，甚至体现出一种责任。 随便说&#8220;爱&#8221;的男人是不负责任的。 四、文明恋爱，不可强求 1、不是每个mm都能追到手的 好女孩子总会有很多人追，不可能遂了每个人的心愿，总会有失败者。举个例子，就算你刻苦钻研掌握了最搞超的追mm原理，你一样追不上twins里的任何一个。 换个角度考虑问题，一个小学没毕业的农村小保姆，即使对你再好，每个月赚600给你买700的礼物（透支），愿意为你&#8220;当牛做马&#8221;，你也不会爱上她。如果她每天哭哭啼啼的缠着，你肯定觉得烦。 所以说爱情是需要物质基础的，至少需要平衡。 2、追mm做是一种严肃的社会活动 千万不要把人家搞烦了，要给自己留后路。大丈夫何患无妻？有些mm确实势利眼（少数），如果不服气，你可以发愤图强，用事实证明&#8220;她当时瞎了眼&#8221;，绝对不要误人误己。 最后补充两点： ①千万不要在mm面前显得愤世嫉俗，愤世嫉俗有时候意味着&#8220;你很失败&#8221;。 ②看帖千万一定要回帖，要不没有女孩子喜欢呵呵呵&#8230;<br><img src ="http://www.cnitblog.com/forrest/aggbug/40682.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/forrest/" target="_blank">forrest</a> 2008-03-08 21:55 <a href="http://www.cnitblog.com/forrest/archive/2008/03/08/40682.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>周末杂记：关于生活以及呵护我的膝盖</title><link>http://www.cnitblog.com/forrest/archive/2008/02/24/40099.html</link><dc:creator>forrest</dc:creator><author>forrest</author><pubDate>Sun, 24 Feb 2008 15:58:00 GMT</pubDate><guid>http://www.cnitblog.com/forrest/archive/2008/02/24/40099.html</guid><wfw:comment>http://www.cnitblog.com/forrest/comments/40099.html</wfw:comment><comments>http://www.cnitblog.com/forrest/archive/2008/02/24/40099.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/forrest/comments/commentRss/40099.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/forrest/services/trackbacks/40099.html</trackback:ping><description><![CDATA[<table style="width: 649px; height: 1473px;" border="0" cellpadding="0" cellspacing="0">
    <tbody>
        <tr>
            <td id="" colspan="2" class="article_title" height="60">关于今天的鲁豫有约：费翔专访<br><br>当问到费翔的个人问题时：费翔和鲁豫表达了相似的观点：费翔说，不要因为年龄或者社会和父母的压力就去作出结婚的选择，虽然我们要孝顺父母，但是生活是自己的，如果不是自己想做的事，而在外界的压力下作出的选择，那样很傻。<br><br>感觉鲁豫的节目比较真实和轻松，优雅又不失本色，带给别人的是发自内心的一种快乐（起码今天的节目是的）。做人就是要这样，本色的做一个优雅的人，同时要会给别人带来快乐，至少是你周围的大多数人吧。<br><br><br>关于膝盖运动损伤</td>
        </tr>
        <tr>
            <td colspan="2" height="5">
            <table style="width: 715px; height: 23px;" align="center" border="0" cellpadding="0" cellspacing="0">
                <tbody>
                    <tr>
                        <td bgcolor="#dddddd" height="1"><br></td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
        <tr bgcolor="#f6fff6">
            <td align="center" height="25" width="50%"><span class="bmain">2007-12-27 16:12:37
            </span></td>
            <td align="center" width="50%">
            <br></td>
        </tr>
        <tr>
            <td colspan="2" class="article_content" style="padding: 10px;">
            <table align="left" border="0" cellpadding="0" cellspacing="0">
                <tbody>
                    <tr>
                        <td width="25">
                        <br></td>
                        <td width="6"><br></td>
                    </tr>
                </tbody>
            </table>
            <p>症状：<br>在
            膑尖处有明显的压疼。触摸时，可感到膑腱附着处有肿胀、钝厚的改变。有些患者可以摸到增生的骨刺尖。作伸膝抗阻试验、半蹲试验时，膑尖处出现疼痛。无论慢
            性或急性腘肌损伤，主要表现是蹲下或起来时，或在上楼、爬坡时，腘窝部出现疼痛，其性质可以是间断性或持续性的，大部分慢性损伤者表现为钝疼，急性损伤者
            则是剧烈或较剧烈的撕样疼或牵扯样疼。<br>检验方法：<br>1、平躺于床上，（如果只有自己就双腿伸直坐在床上，双腿一定要伸直，否则没有感觉），用手的虎口对准膝盖上延，拤住，保证膝盖不能前后移动，然后大腿用力，如果感觉到明显疼痛就是膝盖内软组织损伤了，如果疼痛剧烈，就是软组织老化了<br>2、
            伸膝抗阻试验仰卧位：检查者一手托患膝，让患者做伸膝动作，另一手置于踝关节前侧施以阻挡力。出现膝前疼痛则为阳性。用来检查伸膝装置的劳损和髌股关节的
            退变，根据髌骨上缘、髌骨尖、髌韧带部以及髌骨后等具体出现疼痛的部位可以进行进一步诊断。伸膝装置的劳损可以在膝关节任何伸屈度进行检查，髌股关节的退
            变则须在屈膝45-90时进行检查。<br>形成原因：<br>由于人体骨骼的结构特点，当腿步弯曲时膝盖内的软组织密实接触，润滑液体不能很好的保护膝盖，长时间负重登山，造成膝盖内硬性摩擦，导致软组织老化。登山、骑自行车、爬楼等等，长时间膝盖弯曲的动作都会导致软组织老化。<br>治疗：<br>1．服用阿司匹林以减轻疼痛和炎症<br>2．如果X照片反映有半月板撕裂，那需要外科治疗，即关节镜外科处理，那包括插入不锈钢管子，用吸引器吸出撕裂的软骨片。这种流行的新<a href="http://search.fh21.com.cn/?key=&amp;col=9">手术</a>方法可让人手术后一周内恢复运动能力。<br>3．理疗之外还可以用中药外敷、按摩 <br>4．
            恢复措施：双腿伸直平坐于床上，腿部保证平直的情况下，用力抬高，反复一百次。注意！不能双腿同时，要分开进行。此方法的原因及作用：当双腿伸直时大腿骨
            和小腿骨之间的距离最大，软组织之间就能产生一定的空间。腿伸直用力上抬，实质是肌肉用力，就可以把润滑液压入膝盖软组织之间的空隙，给软组织补充<a href="http://search.fh21.com.cn/?key=&amp;col=10">营养</a>，长时间如此可加强软组织的耐磨性能。 <br>预防：<br>加
            强大腿正面肌肉耐力和力量的锻炼，用处在什么地方？用处不在于让你爬更远的山，而是在于让你就算是在下山的时候也能保持旺盛的体力。很多损伤都是发生在体
            力不济的时候，当大腿劳累的时候，你走路时便会不自觉的锁关节，锁关节的意思就是把腿部伸的笔直，这样可以减轻大腿肌肉的负担，暂时放松自己的肌肉，但是
            却很容易造成膝劳损，膝冲击伤，脚踝劳损，脚踝扭伤，以及腰肌劳损。<br>1．训练前热身活动一定要充分，不要直接上大运动量，损伤的发生最常见于疲劳或精力不足的时候。<br>2．跑步时注意跑步姿势，不要只用某只脚的一侧着地；<br>3．注意运用大腿的肌肉群，避免膝盖受到来自脚下的直接冲击。下山过程中为了防止膝关节承受压力增大，应前脚掌先着地，再过渡到全脚掌着地，以缓冲膝关节的压力。登山运动过程中结束后可对膝关节进行局部按摩，使膝关节得到充分的放松，防止其僵硬。<br>4．出现膝盖不适症状时，适当减小运动量和运动频率，避免进行剧烈的跑、跳和负重运动；<br>5．平时注意膝部保暖，特别在夏天，不要贪凉；<br>6．运动后对腿部肌肉热敷或中药按摩。<br>7．负重拉练时，特别是下坡时，避免膝盖受到冲击；<br>8．
            肌肉的发达可在一定情况下缓解膝盖所承受的压力，可以让膝盖的损伤降低到最小。平时多做腿部肌肉锻炼，尽量减少对膝盖的承受力。有意识地加强对股四头肌
            （大腿前部）和十字韧带的锻炼，增强股四头肌内侧及大腿肌肉力量，结合采用肌肉伸展拉长，步行，马步或贴墙练习等方法，为髌骨在股骨端糟内平稳运动铺好道
            路<br>9．登山前要用双手手指揉搓膝盖下边缘，促进润滑夜对膝盖的保护；<br>10. 伸展拉长的腿筋及髌股关节，有利减少膝损伤的机会</p>
            <p>损伤发生后的恢复注意事项：<br>有些人往往在膝关节损伤以后，放弃了体育运动，其实得不偿失。运动医学<a href="http://bbs.fh21.com.cn/php2/expert.htm">专家</a>研究发现，从长远的效果看，不锻炼的人肌肉萎缩和关节退化的速度更快，锻炼则能有效减缓萎缩和退化速度。进行膝盖耐力锻炼的原则是，要在最大程度减小关节负荷的情况下，加强肌肉和骨质的锻炼。<br>1、直腿抬高是一种简单易行的锻炼方法：平躺在床上，把腿伸起，让大腿上的肌肉收紧、绷直，与床成45度夹角，每次维持1秒钟，再慢慢地放下，如此重复50次。持续练习，对加强膝关节的抗负荷能力很有帮助。<br>2、
            贴墙蹲起是另一种有效保护膝关节的方法。背靠墙而立，脚后跟离墙1只脚的距离，在两膝盖间放置一只球（可以是篮球、足球），夹紧球，身体沿墙壁缓慢下蹲，
            直到膝盖与小腿成90度直角，默数三秒，再慢慢直起身体。因为背部贴墙，支撑了一部分体重，膝盖受力相对比较少，因此较安全。坚持每星期运动2至3次，每
            次重复15次。<br>3、跳绳对膝盖的冲击力量只有跑步的1／7 至1／2，而且只要你能掌握跳绳的技巧，用脚底的前端着地，就能降低对身体的冲击，这样膝部既得到了锻炼又保证了安全。<br>4、坚持按摩或拍打膝部可加速膝部的血液循环，但力度要适当。 <br>希望各位驴友尤其是新人做好膝盖保护，平时加强相关锻炼</p>
            </td>
        </tr>
    </tbody>
</table><img src ="http://www.cnitblog.com/forrest/aggbug/40099.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/forrest/" target="_blank">forrest</a> 2008-02-24 23:58 <a href="http://www.cnitblog.com/forrest/archive/2008/02/24/40099.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux 中文显示乱码解决办法 可能导致vim编辑器不能正常使用</title><link>http://www.cnitblog.com/forrest/archive/2008/01/17/38987.html</link><dc:creator>forrest</dc:creator><author>forrest</author><pubDate>Thu, 17 Jan 2008 10:56:00 GMT</pubDate><guid>http://www.cnitblog.com/forrest/archive/2008/01/17/38987.html</guid><wfw:comment>http://www.cnitblog.com/forrest/comments/38987.html</wfw:comment><comments>http://www.cnitblog.com/forrest/archive/2008/01/17/38987.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/forrest/comments/commentRss/38987.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/forrest/services/trackbacks/38987.html</trackback:ping><description><![CDATA[<div class="subhead"><strong>linux 中文显示乱码解决办法</strong></div>
<div class="content">
<p>vi /etc/sysconfig/i18n</p>
<p>将内容改为</p>
<p>LANG="zh_CN.GB18030"<br>LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"<br>SUPPORTED="zh_CN.GB18030:zh_CN:zh:en_US.UTF-8:en_US:en"<br>SYSFONT="lat0-sun16"</p>
<p>这样中文在SSH,telnet终端就可以正常显示了。</p>
</div><img src ="http://www.cnitblog.com/forrest/aggbug/38987.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/forrest/" target="_blank">forrest</a> 2008-01-17 18:56 <a href="http://www.cnitblog.com/forrest/archive/2008/01/17/38987.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> 比较详细的DOS命令说明(摘录)</title><link>http://www.cnitblog.com/forrest/archive/2007/12/21/37950.html</link><dc:creator>forrest</dc:creator><author>forrest</author><pubDate>Fri, 21 Dec 2007 01:54:00 GMT</pubDate><guid>http://www.cnitblog.com/forrest/archive/2007/12/21/37950.html</guid><wfw:comment>http://www.cnitblog.com/forrest/comments/37950.html</wfw:comment><comments>http://www.cnitblog.com/forrest/archive/2007/12/21/37950.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/forrest/comments/commentRss/37950.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/forrest/services/trackbacks/37950.html</trackback:ping><description><![CDATA[<h3><br>
</h3>
<strong><font size="3">1</font></strong><font color="#ff0000"><font size="3"><strong> echo 和 @<br></strong></font></font><font color="#8b0000"><strong>回显命令<br></strong></font><font color="#0000ff">@ &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp; #关闭单行回显<br>echo off &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;   #从下一行开始关闭回显<br>@echo off &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  #从本行开始关闭回显。一般批处理第一行都是这个<br>echo on &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp; #从下一行开始打开回显<br>echo &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp; #显示当前是 echo off 状态还是 echo on 状态<br>echo. &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;   #输出一个&#8221;回车换行&#8221;，空白行<br> &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  #(同echo, echo; echo+ echo[ echo] echo/ echo)</font><br><br><strong><font size="3"><font color="#00f000">2</font> errorlevel</font></strong><br><font color="#0000ff">echo %errorlevel%<br>每个命令运行结束，可以用这个命令行格式查看返回码<br>默认值为0，一般命令执行出错会设 errorlevel 为1</font><br><br><strong><font size="3"><font color="#00f000">3</font> dir</font></strong><br><strong><font color="#ff0000">显示文件夹内容</font><br></strong><font color="#0000ff">dir &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp; #显示当前目录中的文件和子目录<br>dir /a &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp; #显示当前目录中的文件和子目录，包括隐藏文件和系统文件<br>dir c: /a:d &nbsp;  &nbsp;  &nbsp;  &nbsp;  #显示 C 盘当前目录中的目录<br>dir c: /a:-d &nbsp;  &nbsp;  &nbsp;  &nbsp; #显示 C 盘根目录中的文件<br>dir c: /b/p &nbsp;  &nbsp;  &nbsp;  &nbsp; #/b只显示文件名，/p分页显示<br>dir *.exe /s &nbsp;  &nbsp;  &nbsp;  &nbsp; #显示当前目录和子目录里所有的.exe文件</font><br><br><font size="3"><font color="#00f000"><strong>4</strong></font><strong> cd</strong></font><br><font color="#8b0000"><strong>切换目录</strong><br></font><font color="#0000ff">cd &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp; #进入根目录<br>cd &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  #显示当前目录<br>cd /d d:sdk &nbsp;  &nbsp;  &nbsp;  &nbsp; #可以同时更改盘符和目录</font><br><br><font color="#000000"><strong><font size="3">5</font> md</strong></font><br><font color="#8b0000"><strong>创建目录</strong><br></font><font color="#0000ff">md d:abc &nbsp;  &nbsp;  &nbsp;  &nbsp;  #如果 d:a 不存在，将会自动创建中级目录<br>#如果命令扩展名被停用，则需要键入 mkdir abc。<br></font><br><font size="3"><font color="#00f000"><strong>6</strong></font><strong> rd</strong></font><br><font color="#8b0000"><strong>删除目录</strong><br></font><font color="#0000ff">rd abc &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp; #删除当前目录里的 abc 子目录，要求为空目录<br>rd /s/q d:temp &nbsp;  &nbsp;  &nbsp; #删除 d:temp 文件夹及其子文件夹和文件，/q安静模式</font><br><br><strong><font size="3"><font color="#00f000">7</font> del</font></strong><br><strong><font color="#ff0000">删除文件</font><br></strong><font color="#0000ff">del d:test.txt &nbsp;  &nbsp;  &nbsp; #删除指定文件，不能是隐藏、系统、只读文件<br>del /q/a/f d:temp*.*<br>删除 d:temp 文件夹里面的所有文件，包括隐藏、只读、系统文件，不包括子目录<br>del /q/a/f/s d:temp*.*<br>删除 d:temp 及子文件夹里面的所有文件，包括隐藏、只读、系统文件，不包括子目录</font><br><br><font size="3"><font color="#00f000"><strong>8</strong></font><strong> ren</strong><br></font><font color="#ff0000"><strong>重命名命令</strong></font><br><font color="#0000ff">ren d:temp tmp &nbsp;  &nbsp;  &nbsp; #支持对文件夹的重命名<br></font><br><strong><font size="3"><font color="#00f000">9</font> cls<br></font></strong><font color="#8b0000"><strong>清屏<br></strong></font><br><font size="3"><font color="#00f000"><strong>10</strong></font><strong> type<br></strong></font><font color="#0000ff"><strong>显示文件内容<br></strong></font>type c:boot.ini &nbsp;  &nbsp;   #显示指定文件的内容，程序文件一般会显示乱码<br>type *.txt &nbsp;  &nbsp;  &nbsp;  &nbsp;   #显示当前目录里所有.txt文件的内容<br><br><strong><font size="3"><font color="#00f000">11</font> copy<br></font></strong><font color="#0000ff"><strong>拷贝文件<br></strong></font>copy c:test.txt d:test.bak<br>复制 c:test.txt 文件到 d: ，并重命名为 test.bak<br>copy con test.txt<br>从屏幕上等待输入，按 Ctrl+Z 结束输入，输入内容存为test.txt文件<br>con代表屏幕，prn代表打印机，nul代表空设备<br>copy 1.txt + 2.txt 3.txt<br>合并 1.txt 和 2.txt 的内容，保存为 3.txt 文件<br>如果不指定 3.txt ，则保存到 1.txt<br>copy test.txt +<br>复制文件到自己，实际上是修改了文件日期<br><br><strong><font size="3"><font color="#00f000">12</font> title<br></font></strong><font color="#0000ff"><strong>设置cmd窗口的标题</strong></font><br>title 新标题 &nbsp;  &nbsp;  &nbsp;  &nbsp; #可以看到cmd窗口的标题栏变了<br><br><font color="#ff0000"><font size="3"><strong>13</strong></font><strong> ver</strong><br></font><font color="#8b0000"><strong>显示系统版本<br></strong></font><br><strong><font size="3"><font color="#00f000">14</font> label 和 vol<br></font></strong><font color="#0000ff"><strong>设置卷标<br></strong></font>vol &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp; #显示卷标<br>label &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  #显示卷标，同时提示输入新卷标<br>label c:system &nbsp;  &nbsp;  &nbsp;  #设置C盘的卷标为 system<br><br><strong><font size="3"><font color="#00f000">15</font> pause</font><br></strong><font color="#8b0000"><strong>暂停命令<br></strong></font><br><strong><font size="3"><font color="#00f000">16</font> rem 和 ::</font><br></strong><font color="#0000ff"><strong>注释命令</strong></font><br>注释行不执行操作<br><br><strong><font size="3"><font color="#00f000">17</font> date 和 time</font></strong><br><font color="#0000ff"><strong>日期和时间</strong></font><br>date &nbsp;  &nbsp;  &nbsp;  &nbsp;   #显示当前日期，并提示输入新日期，按"回车"略过输入<br>date/t &nbsp;  &nbsp;  &nbsp;  &nbsp; #只显示当前日期，不提示输入新日期<br>time &nbsp;  &nbsp;  &nbsp;  &nbsp;   #显示当前时间，并提示输入新时间，按"回车"略过输入<br>time/t &nbsp;  &nbsp;  &nbsp;  &nbsp; #只显示当前时间，不提示输入新时间<br><br><font color="#ff0000"><strong><font size="3">18</font> goto 和 :</strong></font><strong><br></strong><font color="#0000ff"><strong>跳转命令<br></strong></font>:label &nbsp;  &nbsp;  &nbsp;  &nbsp; #行首为:表示该行是标签行，标签行不执行操作<br>goto label &nbsp;  &nbsp;   #跳转到指定的标签那一行<br><br><strong><font size="3"><font color="#00f000">19</font> find (外部命令)</font></strong><br><font color="#0000ff"><strong>查找命令<br></strong></font>find "abc" c:test.txt<br>在 c:test.txt 文件里查找含 abc 字符串的行<br>如果找不到，将设 errorlevel 返回码为1<br>find /i &#8220;abc&#8221; c:test.txt<br>查找含 abc 的行，忽略大小写<br>find /c "abc" c:test.txt<br>显示含 abc 的行的行数<br><br><strong><font size="3"><font color="#00f000">20</font> more (外部命令)</font><br></strong><font color="#0000ff"><strong>逐屏显示<br></strong></font>more c:test.txt &nbsp;  &nbsp;   #逐屏显示 c:test.txt 的文件内容<br><br><strong><font size="3"><font color="#00f000">21</font> tree</font></strong><br><font color="#0000ff"><strong>显示目录结构<br></strong></font>tree d: &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  #显示D盘的文件目录结构<br><br><strong><font size="3"><font color="#00f000">22</font> &amp;</font></strong><br><font color="#8b0000"><strong>顺序执行多条命令，而不管命令是否执行成功<br></strong></font><br><strong><font size="3"><font color="#00f000">23</font> &amp;&amp;<br></font></strong><font color="#0000ff"><strong>顺序执行多条命令，当碰到执行出错的命令后将不执行后面的命令<br></strong></font>find "ok" c:test.txt &amp;&amp; echo 成功<br>如果找到了"ok"字样，就显示"成功"，找不到就不显示<br><br><strong><font size="3"><font color="#00f000">24</font> ||</font></strong><br><font color="#0000ff"><strong>顺序执行多条命令，当碰到执行正确的命令后将不执行后面的命令</strong></font><br>find "ok" c:test.txt || echo 不成功<br>如果找不到"ok"字样，就显示"不成功"，找到了就不显示<br><br><font color="#ff0000"><strong><font size="3">25</font> |</strong></font><br><font color="#0000ff"><strong>管道命令</strong></font><br>dir *.* /s/a | find /c ".exe"<br>管道命令表示先执行 dir 命令，对其输出的结果执行后面的 find 命令<br>该命令行结果：输出当前文件夹及所有子文件夹里的.exe文件的个数<br>type c:test.txt|more<br>这个和 more c:test.txt 的效果是一样的<br><br><strong><font size="3"><font color="#00f000">26</font> &gt; 和 &gt;&gt;</font><br></strong><font color="#0000ff"><strong>输出重定向命令<br></strong></font>&gt; 清除文件中原有的内容后再写入<br>&gt;&gt; 追加内容到文件末尾，而不会清除原有的内容<br>主要将本来显示在屏幕上的内容输出到指定文件中<br>指定文件如果不存在，则自动生成该文件<br>type c:test.txt &gt;prn<br>屏幕上不显示文件内容，转向输出到打印机<br>echo hello world&gt;con<br>在屏幕上显示hello world，实际上所有输出都是默认 &gt;con 的<br>copy c:test.txt f: &gt;nul<br>拷贝文件，并且不显示"文件复制成功"的提示信息，但如果f盘不存在，还是会显示出错信息<br>copy c:test.txt f: &gt;nul 2&gt;nul<br>不显示&#8221;文件复制成功&#8221;的提示信息，并且f盘不存在的话，也不显示错误提示信息<br>echo ^^W ^&gt; ^W&gt;c:test.txt<br>生成的文件内容为 ^W &gt; W<br>^ 和 &gt; 是控制命令，要把它们输出到文件，必须在前面加个 ^ 符号<br><br><font color="#ff0000"><strong><font size="3">27</font> &lt;</strong></font><strong><br></strong><font color="#0000ff"><strong>从文件中获得输入信息，而不是从屏幕上</strong></font><br>一般用于 date time label 等需要等待输入的命令<br>@echo off<br>echo 2005-05-01&gt;temp.txt<br>date &lt;temp.txt<br>del temp.txt<br>这样就可以不等待输入直接修改当前日期<br><br><strong><font size="3"><font color="#00f000">28</font> %0 %1 %2 %3 %4 %5 %6 %7 %8 %9 %*</font></strong><br><font color="#0000ff"><strong>命令行传递给批处理的参数</strong></font><br>%0 批处理文件本身<br>%1 第一个参数<br>%9 第九个参数<br>%* 从第一个参数开始的所有参数<br><br>批参数(%n)的替代已被增强。您可以使用以下语法:<br><br> &nbsp;  &nbsp;   %~1 &nbsp;  &nbsp;  &nbsp;  &nbsp;  - 删除引号(")，扩充 %1<br> &nbsp;  &nbsp;   %~f1 &nbsp;  &nbsp;  &nbsp;  &nbsp; - 将 %1 扩充到一个完全合格的路径名<br> &nbsp;  &nbsp;   %~d1 &nbsp;  &nbsp;  &nbsp;  &nbsp; - 仅将 %1 扩充到一个驱动器号<br> &nbsp;  &nbsp;   %~p1 &nbsp;  &nbsp;  &nbsp;  &nbsp; - 仅将 %1 扩充到一个路径<br> &nbsp;  &nbsp;   %~n1 &nbsp;  &nbsp;  &nbsp;  &nbsp; - 仅将 %1 扩充到一个文件名<br> &nbsp;  &nbsp;   %~x1 &nbsp;  &nbsp;  &nbsp;  &nbsp; - 仅将 %1 扩充到一个文件扩展名<br> &nbsp;  &nbsp;   %~s1 &nbsp;  &nbsp;  &nbsp;  &nbsp; - 扩充的路径指含有短名<br> &nbsp;  &nbsp;   %~a1 &nbsp;  &nbsp;  &nbsp;  &nbsp; - 将 %1 扩充到文件属性<br> &nbsp;  &nbsp;   %~t1 &nbsp;  &nbsp;  &nbsp;  &nbsp; - 将 %1 扩充到文件的日期/时间<br> &nbsp;  &nbsp;   %~z1 &nbsp;  &nbsp;  &nbsp;  &nbsp; - 将 %1 扩充到文件的大小<br> &nbsp;  &nbsp;   %~$PATH : 1 - 查找列在 PATH 环境变量的目录，并将 %1<br> &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  扩充到找到的第一个完全合格的名称。如果环境<br> &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  变量名未被定义，或者没有找到文件，此组合键会<br> &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  扩充到空字符串<br><br>可以组合修定符来取得多重结果:<br><br> &nbsp;  &nbsp;  %~dp1 &nbsp;  &nbsp;  &nbsp;   - 只将 %1 扩展到驱动器号和路径<br> &nbsp;  &nbsp;  %~nx1 &nbsp;  &nbsp;  &nbsp;   - 只将 %1 扩展到文件名和扩展名<br> &nbsp;  &nbsp;  %~dp$PATH:1 - 在列在 PATH 环境变量中的目录里查找 %1，<br> &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  并扩展到找到的第一个文件的驱动器号和路径。<br> &nbsp;  &nbsp;  %~ftza1 &nbsp;  &nbsp;  &nbsp; - 将 %1 扩展到类似 DIR 的输出行。<br>可以参照 call/? 或 for/? 看出每个参数的含意<br>echo load "%%1" "%%2"&gt;c:test.txt<br>生成的文件内容为 load "%1" "%2"<br>批处理文件里，用这个格式把命令行参数输出到文件<br><br><strong><font size="3"><font color="#00f000">29</font> if</font></strong><br><font color="#0000ff"><strong>判断命令<br></strong></font>if "%1"=="/a" echo 第一个参数是/a<br>if /i "%1" equ "/a" echo 第一个参数是/a<br>/i 表示不区分大小写，equ 和 == 是一样的，其它运算符参见 if/?<br>if exist c:test.bat echo 存在c:test.bat文件<br>if not exist c:windows (<br> &nbsp;  &nbsp;   echo 不存在c:windows文件夹<br> &nbsp;  &nbsp;   )<br>if exist c:test.bat (<br> &nbsp;  &nbsp;   echo 存在c:test.bat<br> &nbsp;  &nbsp;   ) else (<br> &nbsp;  &nbsp;   echo 不存在c:test.bat<br> &nbsp;  &nbsp;   )<br><br><strong><font size="3"><font color="#00f000">30</font> setlocal 和 endlocal</font></strong><br><font color="#8b0000"><strong>设置&#8221;命令扩展名&#8221;和&#8221;延缓环境变量扩充&#8221;</strong></font><br>SETLOCAL ENABLEEXTENSIONS &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  #启用"命令扩展名"<br>SETLOCAL DISABLEEXTENSIONS &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp; #停用"命令扩展名"<br>SETLOCAL ENABLEDELAYEDEXPANSION &nbsp;  &nbsp;  &nbsp;  #启用"延缓环境变量扩充"<br>SETLOCAL DISABLEDELAYEDEXPANSION &nbsp;  &nbsp;  &nbsp; #停用"延缓环境变量扩充"<br>ENDLOCAL &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp; #恢复到使用SETLOCAL语句以前的状态<br>&#8220;命令扩展名&#8221;默认为启用<br>&#8220;延缓环境变量扩充&#8221;默认为停用<br>批处理结束系统会自动恢复默认值<br>可以修改注册表以禁用"命令扩展名"，详见 cmd /? 。所以用到"命令扩展名"的程<br>序，建议在开头和结尾加上 SETLOCAL ENABLEEXTENSIONS 和 ENDLOCAL 语句，以确<br>保程序能在其它系统上正确运行<br>"延缓环境变量扩充"主要用于 if 和 for 的符合语句，在 set 的说明里有其实用例程<br><br><strong><font size="3"><font color="#00f000">31</font> set</font></strong><br><font color="#0000ff"><strong>设置变量<br></strong></font>引用变量可在变量名前后加 % ，即 %变量名%<br>set &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp; #显示目前所有可用的变量，包括系统变量和自定义的变量<br>echo %SystemDrive% &nbsp;  &nbsp;  &nbsp; #显示系统盘盘符。系统变量可以直接引用<br>set p &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  #显示所有以p开头的变量，要是一个也没有就设errorlevel=1<br>set p=aa1bb1aa2bb2 &nbsp;  &nbsp;  &nbsp; #设置变量p，并赋值为 = 后面的字符串，即aa1bb1aa2bb2<br>echo %p% &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  #显示变量p代表的字符串，即aa1bb1aa2bb2<br>echo %p:~6% &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  #显示变量p中第6个字符以后的所有字符，即aa2bb2<br>echo %p:~6,3% &nbsp;  &nbsp;  &nbsp;  &nbsp;   #显示第6个字符以后的3个字符，即aa2<br>echo %p:~0,3% &nbsp;  &nbsp;  &nbsp;  &nbsp;   #显示前3个字符，即aa1<br>echo %p:~-2% &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp; #显示最后面的2个字符，即b2<br>echo %p:~0,-2% &nbsp;  &nbsp;  &nbsp;  &nbsp;  #显示除了最后2个字符以外的其它字符，即aa1bb1aa2b<br>echo %p:aa=c% &nbsp;  &nbsp;  &nbsp;  &nbsp;   #用c替换变量p中所有的aa，即显示c1bb1c2bb2<br>echo %p:aa=% &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp; #将变量p中的所有aa字符串置换为空，即显示1bb12bb2<br>echo %p:*bb=c% &nbsp;  &nbsp;  &nbsp;  &nbsp;  #第一个bb及其之前的所有字符被替换为c，即显示c1aa2bb2<br>set p=%p:*bb=c% &nbsp;  &nbsp;  &nbsp;  &nbsp; #设置变量p，赋值为 %p:*bb=c% ，即c1aa2bb2<br>set /a p=39 &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  #设置p为数值型变量，值为39<br>set /a p=39/10 &nbsp;  &nbsp;  &nbsp;  &nbsp;  #支持运算符，有小数时用去尾法，39/10=3.9，去尾得3，p=3<br>set /a p=p/10 &nbsp;  &nbsp;  &nbsp;  &nbsp;   #用 /a 参数时，在 = 后面的变量可以不加%直接引用<br>set /a p=&#8221;1&amp;0&#8243; &nbsp;  &nbsp;  &nbsp;  &nbsp;  #&#8221;与&#8221;运算，要加引号。其它支持的运算符参见set/?<br>set p= &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp; #取消p变量<br>set /p p=请输入<br>屏幕上显示&#8221;请输入&#8221;，并会将输入的字符串赋值给变量p<br>注意这条可以用来取代 choice 命令<br>注意变量在 if 和 for 的复合语句里是一次性全部替换的，如<br>@echo off<br>set p=aaa<br>if %p%==aaa (<br> &nbsp;  &nbsp;   echo %p%<br> &nbsp;  &nbsp;   set p=bbb<br> &nbsp;  &nbsp;   echo %p%<br> &nbsp;  &nbsp;   )<br>结果将显示<br>aaa<br>aaa<br>因为在读取 if 语句时已经将所有 %p% 替换为aaa<br>这里的"替换"，在 /? 帮助里就是指"扩充"、"环境变量扩充"<br>可以启用&#8221;延缓环境变量扩充&#8221;，用 ! 来引用变量，即 !变量名!<br>@echo off<br>SETLOCAL ENABLEDELAYEDEXPANSION<br>set p=aaa<br>if %p%==aaa (<br> &nbsp;  &nbsp;   echo %p%<br> &nbsp;  &nbsp;   set p=bbb<br> &nbsp;  &nbsp;   echo !p!<br> &nbsp;  &nbsp;   )<br>ENDLOCAL<br>结果将显示<br>aaa<br>bbb<br>还有几个动态变量，运行 set 看不到<br>%CD% &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  #代表当前目录的字符串<br>%DATE% &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;   #当前日期<br>%TIME% &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;   #当前时间<br>%RANDOM% &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp; #随机整数，介于0~32767<br>%ERRORLEVEL% &nbsp;  &nbsp;  &nbsp;  &nbsp;   #当前 ERRORLEVEL 值<br>%CMDEXTVERSION% &nbsp;  &nbsp;  &nbsp;   #当前命令处理器扩展名版本号<br>%CMDCMDLINE% &nbsp;  &nbsp;  &nbsp;  &nbsp;   #调用命令处理器的原始命令行<br>可以用echo命令查看每个变量值，如 echo %time%<br>注意 %time% 精确到毫秒，在批处理需要延时处理时可以用到<br><br><font color="#ff0000"><strong><font size="3">32</font> start</strong></font><br><font color="#0000ff"><strong>批处理中调用外部程序的命令，否则等外部程序完成后才继续执行剩下的指令</strong></font><br><br><font color="#ff0000"><strong><font size="3">33 </font>call</strong></font><br><font color="#8b0000"><strong>批处理中调用另外一个批处理的命令，否则剩下的批处理指令将不会被执行<br>有时有的应用程序用start调用出错的，也可以call调用<br></strong></font><br><font color="#ff0000"><strong><font size="3">34</font> choice (外部命令)</strong></font><br><font color="#0000ff"><strong>选择命令<br></strong></font>让用户输入一个字符，从而选择运行不同的命令，返回码errorlevel为1234&#8230;&#8230;<br>win98里是choice.com<br>win2000pro里没有，可以从win98里拷过来<br>win2003里是choice.exe<br>choice /N /C y /T 5 /D y&gt;nul<br>延时5秒<br><br><font color="#ff0000"><strong><font size="3">35</font> assoc 和 ftype</strong></font><br><font color="#0000ff">文件关联<br></font>assoc 设置'文件扩展名'关联，关联到'文件类型'<br>ftype 设置'文件类型'关联，关联到'执行程序和参数'<br>当你双击一个.txt文件时，windows并不是根据.txt直接判断用 notepad.exe 打开<br>而是先判断.txt属于 txtfile '文件类型'<br>再调用 txtfile 关联的命令行 txtfile=%SystemRoot%system32NOTEPAD.EXE %1<br>可以在"文件夹选项"&#8594;"文件类型"里修改这2种关联<br>assoc &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp; #显示所有'文件扩展名'关联<br>assoc .txt &nbsp;  &nbsp;  &nbsp;  #显示.txt代表的'文件类型'，结果显示 .txt=txtfile<br>assoc .doc &nbsp;  &nbsp;  &nbsp;  #显示.doc代表的'文件类型'，结果显示 .doc=Word.Document.8<br>assoc .exe &nbsp;  &nbsp;  &nbsp;  #显示.exe代表的'文件类型'，结果显示 .exe=exefile<br>ftype &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp; #显示所有'文件类型'关联<br>ftype exefile &nbsp;  &nbsp;  #显示exefile类型关联的命令行，结果显示 exefile="%1" %* <br>assoc .txt=Word.Document.8<br>设置.txt为word类型的文档，可以看到.txt文件的图标都变了<br>assoc .txt=txtfile<br>恢复.txt的正确关联<br>ftype exefile="%1" %*<br>恢复 exefile 的正确关联<br>如果该关联已经被破坏，可以运行 command.com ，再输入这条命令<br><br><strong><font size="3"><font color="#00f000">36</font> pushd 和 popd</font></strong><br><font color="#0000ff"><strong>切换当前目录<br></strong></font>@echo off<br>c: &amp; cd &amp; md mp3 &nbsp;  &nbsp;  &nbsp;   #在 C: 建立 mp3 文件夹<br>md d:mp4 &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  #在 D: 建立 mp4 文件夹<br>cd /d d:mp4 &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  #更改当前目录为 d:mp4<br>pushd c:mp3 &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  #保存当前目录，并切换当前目录为 c:mp3<br>popd &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp; #恢复当前目录为刚才保存的 d:mp4<br><br><font color="#ff0000"><strong><font size="3">37</font> for</strong></font><br><font color="#0000ff"><strong>循环命令<br></strong></font>这个比较复杂，请对照 for/? 来看<br>for %%i in (c: d: e: f:) do echo %%i<br>依次调用小括号里的每个字符串，执行 do 后面的命令<br>注意%%i，在批处理中 for 语句调用参数用2个%<br>默认的字符串分隔符是"空格键"，"Tab键"，"回车键"<br>for %%i in (*.txt) do find "abc" %%i<br>对当前目录里所有的txt文件执行 find 命令<br>for /r . %%i in (*.txt) do find "abc" %%i<br>在当前目录和子目录里所有的.txt文件中搜索包含 abc 字符串的行<br>for /r . %%i in (.) do echo %%~pni<br>显示当前目录名和所有子目录名，包括路径，不包括盘符<br>for /r d:mp3 %%i in (*.mp3) do echo %%i&gt;&gt;d:mp3.txt<br>把 d:mp3 及其子目录里的mp3文件的文件名都存到 d:mp3.txt 里去<br>for /l %%i in (2,1,8) do echo %%i<br>生成2345678的一串数字，2是数字序列的开头，8是结尾，1表示每次加1<br>for /f %%i in ('set') do echo %%i<br>对 set 命令的输出结果循环调用，每行一个<br>for /f "eol=P" %%i in ('set') do echo %%i<br>取 set 命令的输出结果，忽略以 P 开头的那几行<br>for /f %%i in (d:mp3.txt) do echo %%i<br>显示 d:mp3.txt 里的每个文件名，每行一个，不支持带空格的名称<br>for /f "delims=" %%i in (d:mp3.txt) do echo %%i<br>显示 d:mp3.txt 里的每个文件名，每行一个，支持带空格的名称<br>for /f "skip=5 tokens=4" %%a in ('dir') do echo %%a<br>对 dir 命令的结果，跳过前面5行，余下的每行取第4列<br>每列之间的分隔符为默认的"空格"<br>可以注意到 dir 命令输出的前5行是没有文件名的<br>for /f "tokens=1,2,3 delims=- " %%a in ('date /t') do (<br> &nbsp;  &nbsp;   echo %%a<br> &nbsp;  &nbsp;   echo %%b<br> &nbsp;  &nbsp;   echo %%c<br> &nbsp;  &nbsp;   )<br>对 date /t 的输出结果，每行取1、2、3列<br>第一列对应指定的 %%a ，后面的 %%b 和 %%c 是派生出来的，对应其它列<br>分隔符指定为 - 和"空格"，注意 delims=- 后面有个"空格"<br>其中 tokens=1,2,3 若用 tokens=1-3 替换，效果是一样的<br>for /f "tokens=2* delims=- " %%a in ('date /t') do echo %%b<br>取第2列给 %%a ，其后的列都给 %%b<br><font color="#0000ff"><br><strong><font size="3">38</font> subst (外部命令)</strong></font><br><strong><font color="#8b0000">映射磁盘。</font></strong><br>subst z: serverd &nbsp;  &nbsp;  &nbsp; #这样输入z:就可以访问serverd了<br>subst z: /d &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;   #取消该映射<br>subst &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;   #显示目前所有的映时<br><br><strong><font size="3"><font color="#00f000">39</font> &nbsp;  &nbsp; xcopy (外部命令)</font><br></strong><font color="#0000ff"><strong>文件拷贝</strong><br></font>xcopy d:mp3 e:mp3 /s/e/i/y<br>复制 d:mp3 文件夹、所有子文件夹和文件到 e: ，覆盖已有文件<br>加 /i 表示如果 e: 没有 mp3 文件夹就自动新建一个，否则会有询问<br><img src ="http://www.cnitblog.com/forrest/aggbug/37950.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/forrest/" target="_blank">forrest</a> 2007-12-21 09:54 <a href="http://www.cnitblog.com/forrest/archive/2007/12/21/37950.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在LINUX下配置JAVA开发环境</title><link>http://www.cnitblog.com/forrest/archive/2007/12/04/37310.html</link><dc:creator>forrest</dc:creator><author>forrest</author><pubDate>Tue, 04 Dec 2007 02:53:00 GMT</pubDate><guid>http://www.cnitblog.com/forrest/archive/2007/12/04/37310.html</guid><wfw:comment>http://www.cnitblog.com/forrest/comments/37310.html</wfw:comment><comments>http://www.cnitblog.com/forrest/archive/2007/12/04/37310.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/forrest/comments/commentRss/37310.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/forrest/services/trackbacks/37310.html</trackback:ping><description><![CDATA[<h2 class="diaryTitle">在LINUX下配置JAVA开发环境- -</h2>
<p>&nbsp;转自&nbsp;&nbsp;&nbsp;<a  href="http://chenzhe.bokee.com/240643.html">http://chenzhe.bokee.com/240643.html</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</p>
<p>折腾了一天,终于把Linux下的java开发环境配置好了,用的是RedHat Linux9.0 + JDK + Eclipse3 ,写出来共享.<br></p>
<p>1. 去http://java.sun.com/j2se/1.4.2/download.html 下载一个Linux Platform的JDK， <br>建议下载RPM自解压格式的（RPM in self-extracting file，j2sdk-1_4_2_06-linux-i586-rpm.bin）； <br>2. 上载到Linux服务器上，在shell下执行命令： <br>[root@LinuxServer rpm]# chmod 755 j2sdk-1_4_2_06-linux-i586-rpm.bin <br>[root@LinuxServer rpm]# ./j2sdk-1_4_2_06-linux-i586-rpm.bin <br><br>这时会有一段Sun的协议，敲几次空格键，当询问是否同意的时候，敲yes就可以了。 <br>Sun Microsystems, Inc. <br>Binary Code License Agreement <br>for the <br>JAVATM 2 SOFTWARE DEVELOPMENT KIT (J2SDK), STANDARD <br>EDITION, VERSION 1.4.2_X <br>... <br>Do you agree to the above license terms? [yes or no]yes <br>Unpacking... <br>Checksumming... <br>0 <br>0 <br>Extracting... <br>UnZipSFX 5.40 of 28 November 1998, by Info-ZIP (Zip-Bugs@lists.wku.edu). <br>inflating: j2sdk-1_4_2_06-linux-i586.rpm <br>Done. <br><br>注: 如果直接执行unzip命令来解压也是可以的,总之得到一个rpm软件包. <br><br>3. 程序会自动生成一个j2sdk-1_4_2_06-linux-i586.rpm文件，这是主程序包，下面来安装； <br>[root@LinuxServer rpm]#rpm -ivh j2sdk-1_4_2_06-linux-i586.rpm <br>Preparing... ########################################### [100%] <br>1:j2sdk ########################################### [100%] <br><br>4. 设置环境变量 <br>通常都喜欢用export命令直接在shell下设置 <br>[root@LinuxServer rpm]# export JAVA_HOME=/usr/java/j2sdk1.4.2_06 <br>[root@LinuxServer rpm]# export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar <br>[root@LinuxServer rpm]# export PATH=$PATH:$JAVA_HOME/bin <br><br><br>当然这样设置环境变量是可以生效的，但是只对当前shell生效。 <br>如果从另外一个shell登陆，将不能使用刚才设置的变量。所以最好的方法还是修改.bashrc文件。 <br>[root@LinuxServer rpm]#vi .bashrc <br>set JAVA_HOME=/usr/java/j2sdk1.4.2_06 <br>export JAVA_HOME <br>set PATH=$PATH:$JAVA_HOME/bin <br>export PATH <br>set CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar <br>export CLASSPATH <br><br><br>当然也可以通过更改/etc/profile来实现，不过不推荐这么做， <br>因为这样的设置将对所以用户的shell都生效，对系统安全会产生影响。 <br>就是在这个文件的最后加上: <br>export JAVA_HOME=/usr/java/j2sdk1.4.2_06 <br>export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar <br>export PATH=$PATH:$JAVA_HOME/bin <br><br><br>下面来验证一下变量设置是否生效（####注意:在验证前先logout一下，再重新登陆）； <br>[root@LinuxServer rpm]# echo $JAVA_HOME <br>/usr/java/j2sdk1.4.2_06/ <br>[root@LinuxServer rpm]# echo $CLASSPATH <br>/usr/java/j2sdk1.4.2_06/lib/dt.jar:/usr/java/j2sdk1.4.2_06/lib/tools.jar <br>[root@LinuxServer rpm]# echo $PATH <br>/usr/java/j2sdk1.4.2_06/bin/:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin: <br>/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin <br>[root@LinuxServer rpm]# JAVA-version <br>JAVA version "1.4.2_06" <br>JAVA(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_06-b03) <br>JAVA HotSpot(TM) Client VM (build 1.4.2_06-b03, mixed mode) <br><br>5. 环境设置OK，看看JDK是否能正常工作，我们来写一个测试文件test.java <br>[root@LinuxServer rpm]#vi test.java <br>class test <br>{ <br>public static void main(String[] args) <br>{ <br>System.out.println("Hello World!"); <br>} <br>} <br><br>保存退出，下面来编译、执行； <br>[root@LinuxServer text]# javac test.java <br>[root@LinuxServer text]# JAVA test <br>Hello World! <br><br>OK，工作正常。 <br>6. 如果要使某个用户具有运行java命令的权限，只要修改其bash初始化文件即可。 <br>比如要给用户longware以运行java命令的权限， <br>[root@LinuxServer root]# vi /home/longware/.bashrc <br>set JAVA_HOME=/usr/java/j2sdk1.4.2_06 <br>export JAVA_HOME <br>set PATH=$PATH:$JAVA_HOME/bin <br>export PATH <br>set CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar <br>export CLASSPATH <br><br>7. 至此，Linux上JDK的安装完毕。下面安装eclipse-SDK-3.0-linux-gtk.zip <br>去www.eclipse.org下载一个eclipse3.0. 将eclipse-SDK-3.0-linux-gtk.zip解压到/opt中 <br><br>8、编写一个脚本用于启动eclipse <br><br>#!/bin/bash <br># <br># 执行 eclipse 3 <br># <br>export JAVA_HOME=/usr/java/j2sdk1.4.2_06 <br>export CLASSPATH=/usr/java/j2sdk1.4.2_06/lib <br>/opt/eclipse/eclipse -vm /usr/java/j2sdk1.4.2_06/bin/java -data /home/chenzhe/workspace ＆ <br># -vm 参数用以指定使用哪一个 jvm 来执行Eclipse， <br># -date参数用以指定Eclipse的数据目录。 <br>在此指定其存在用户根目录(/home/chenzhe/)下的workspace目录中 <br><br>将脚本保存到/usr/local/bin中，叫eclipse，并给eclipse分配755权限 <br><br>9、在桌面上创建一个启动器， <br>随便选一个图标,路径设置到/opt/eclipse/eclipse，/opt/eclipse/icon.xpm是eclipse自身带的图标. <br><br>10、双击图标,或者在终端输入eclipse, 搞定!</p><img src ="http://www.cnitblog.com/forrest/aggbug/37310.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/forrest/" target="_blank">forrest</a> 2007-12-04 10:53 <a href="http://www.cnitblog.com/forrest/archive/2007/12/04/37310.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>