20071023 kvm linux
http://www.yippeesoft.com

该死的JAVA兼容性。。。。。。。
用了JDK 1.5 反而不行

修改了两个MAKEFILE

TOP=../..
include $(TOP)/build/Makefile.inc

JAVA          =/home/sf/j2sdk1.4.2_04/bin/java
JAVAC         = /home/sf/j2sdk1.4.2_04/bin/javac
JAR           = /home/sf/j2sdk1.4.2_04/bin/jar

JAVAC     = /home/sf/j2sdk1.4.2_04/bin/javac

~~~~~~~~~~~~~

Linking … kvm
make[1]: Leaving directory `/home/sf/kvm/j2me_cldc/kvm/VmUnix/build\’
<<<Finished Recursively making ../../kvm/VmUnix/build all.
[root@mobile linux]# cd /home/sf/kvm/j2me_cldc/kvm/VmUnix/build
[root@mobile build]# ls
fp_obj  kvm  Makefile  obj
[root@mobile build]# ./kvm
ALERT: Must provide class name
Usage: kvm <-options> <classfile>
Options:
  -version
  -classpath <filepath>
  -heapsize <size> (e.g. 65536 or 128k or 1M)

  ~~~~~~~~~~

  https://sdlc4b.sun.com/ECom/EComActionServlet/DownloadPage:~:com.sun.sunit.sdlc.content.DownloadPageInfo;jsessionid=A3D3AE26AFBB97B51B26C593F14E1CD2;jsessionid=A3D3AE26AFBB97B51B26C593F14E1CD2

  cannot access java.lang.StringBuilder
  问题是出在几个String相加 
  找了网上的答案,说是1.5太新,wtk2.2只能用1.4.2的.

   反正最好不要用最新的东东,而是挑一个中间的版本。 
  否则,会有些东东不支持这个滴。

 
1.5使用StringBuilder类来代替1.4中的StringBuffer类

public final class StringBuilder extends Objectimplements Serializable, CharSequence
一个可变的字符序列,从jdk1.5以下版本开始才有该类。

解决方法:

因为Jbuilder2006默认的是jdk1.5所以需要修改jvm的一些设置
Tools ->Configue->JDKs把jdk改成1.4的,之后进入项目属性project->Projet Properties 左侧栏的Build->Java 右侧Language Features和Target Vm均选择 Java 2 SDK v 1.4

JDK1.5API:

此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。

在 StringBuilder 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串生成器中。 append 方法始终将这些字符添加到生成器的末端;而 insert 方法则在指定的点添加字符。

例如,如果 z 引用一个当前内容为“start”的字符串生成器对象,则该方法调用 z.append("le") 将使字符串生成器包含“startle”,而 z.insert(4, "le") 将更改字符串生成器,使之包含“starlet”。

通常,如果 sb 引用 StringBuilder 的实例,则 sb.append(x) 和 sb.insert(sb.length(), x) 具有相同的效果。每个字符串生成器都有一定的容量。只要字符串生成器所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区。如果内部缓冲区溢出,则此容量自动增大。

将 StringBuilder 的实例用于多个线程是不安全的。如果需要这样的同步,则建议使用 StringBuffer。

一、java源码的编辑,编译。//070212 未完待续

编辑一个java源文件a.java:

class a &leftsign;

        public static void main(String[] args) &leftsign;

                String s = "世世世世世世";

                System.out.println(s);

        &rightsign;

&rightsign;

在windows xp中文版中,(默认file.encoding=GBK) 编译OK。

在linux 中,locale环境为 LANG=en_US; LC_ALL=C 时,编译出错:

a.java:3: warning: unmappable character for encoding ASCII

                String s = "????????????";

                               ^

这是为什么呢?

java的class文件使用的是UTF-8编码。

a.java被编译到a.class 的过程,包含到 UTF-8编码转换的过程。

在这里,就是从 C -> UTF-8。

The locale "C" or "POSIX" is a portable locale; its LC_CTYPE part corresponds to the 7-bit ASCII character set.


[root@LinuxServer rpm]#vi .bashrc
set JAVA_HOME=/usr/java/j2sdk1.4.2_07
export JAVA_HOME
set PATH=$PATH:$JAVA_HOME/bin
export PATH
set CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export CLASSPATH
当然也可以通过更改/etc/profile来实现,不过不推荐这么做,
因为这样的设置将对所以用户的shell都生效,对系统安全会产生影响。
就是在这个文件的最后加上:
export JAVA_HOME=/usr/java/j2sdk1.4.2_07
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$PATH:$JAVA_HOME/bin

历史博文

标签:,
七月 24, 2008 at 7:32 下午 by yippee 1,019 次
Category: Dev
Tags: ,