小弟以前没接触个JAVA,现在应研究需要需要对JAVA平台进行移植,遇到点问题想不明白,请各位大侠赐教:
   
   本人选用JamVM,在ARM平台上进行移植。经过一番苦战,终于将JamVM ClassPath 编译通过(有些版本通不过,具体原因没研究)
   将相关文件拷贝到开发板上,进行相关的运行环境,环境变量配置后,运行一个Helloworld程序,虽然慢了点,总算还是跑起来了。
   但是运行一些复杂点的程序,在AWT,还有网络等方面都出现了问题。   本人的想法是,Java API中可能会调用一些平台相关的本地方法来保证Java应用程序的平台无关性,我可能在Java API和操作系
   统之间的接口上出现问题。对JAVA平台进行移植时在API方面是否也要进行相关的移植工作?也许是其它方面的原因,请大家帮忙分析,
   十分感谢!

解决方案 »

  1.   

    一个 Hello World 应该没有这么麻烦把........
      

  2.   

    答:
    1)JAVA平台的可移植性,JVM起了大作用。针对每一个平台都有相应的JVM。楼主的JamVM平台是针对ARM平台上的一种JVM。因此:通常不会在Java API和操作系统之间的接口上出现问题。问题不在这里。
    2)对JAVA平台进行移植时在API方面是否也要进行相关的移植工作?问题的核心是:JamVM是一个很小的VM,它是基于GNU Classpath,它不能支持J2SE的所有的API,而是JAVA中必须的很小的一个API子集。(如:网络API是J2SE网络API的微缩版,AWT的API也变化了)。
    3)因此:你必须针对该微缩版API进行JAVA程序设计(不能:)直接拿来一个基于全部J2SE的API的JAVA程序直接运行。通常要进行整个JAVA程序基于微缩版API进行新的调整。
    以上仅供你参考
      

  3.   

    答:我上边讲的“它不能支持J2SE的所有的API,而是JAVA中必须的很小的一个API子集”,是指它的类库是J2SEAPI的子集,而不是指:它的符合的规范。它当然符合JVM(第二版规范)。
      

  4.   

    经你这么一分析,我想可能是API不一致的原因.
    还有个相关问题想请教,就是java 类库里面好像都是.class文件(我在j2se 平台里的jre/lib/rt.jar里看的,不知合不合理)
    java API在访问操作系统资源时应该还要调用本地函数的,这些本地库我都找不到。在API源代码里面也找不到从哪里调用本地函数的
    (我想API可能也是通过System.loadlibrary()加载本地库,但是在源代码里基本艘不到它)
      

  5.   

    7楼分析的对,只要你调用本地资源的时候就会出错,可移植性确实有,我们把一个项目从windows平台移植到linux平台上就出了一些小问题,改了一些参数就好了。