金山实习周记(3)——移植
一次编写,到处运行。这是JAVA宣传中多么诱人的一个特点。但这句话显然把一个重要的条件给漏掉了。正确的说法应该是一次编写,在相同的JVM上到处运行。因为当JVM的版本不同时,这句话就幻灭了。
移植
完成PC版的局域网打印程序后,剩下的工作就是移植到Android上。但马上就发现不对劲的地方——Android没有javax.print库。对于这个问题,提出了好几个方案,但都一一陨落。
方案一:做成C/S形式。由于PC版已经完成,那么只要稍作修改就能改成server,而Android端也不需要费大力气就能搞定。可惜的是这方案一提出就被以这样做就没意义的理由否决了。
方案二:移植javax.print库。这个移植起来的问题不是一般的多。说个有特色的问题:有些类引用了sun包的类,而sun包的类不仅在JDK的src.zip中没有,而且在编译时还出现不允许使用的错误提示。src.zip中没有,在网上搜源码或直接反编译rt.jar中sun包就能搞定,编译时的错误改包名就能通过。各种问题解决后,就顺利导出包含javax.print的JAR。运行起来也没问题,但得到的结果却总是不对。调试了一天也没得到正确的结果,只能先搁置了。
方案三:使用第三方库。由于Android上找到有打印API的第三方库都是收费的,那么只能找JAVA上的,然后再移植。虽然找到了几个,但发现这些都没有附上使用例子。这种情况下,不是自己看API文档后进行尝试,就是直接放弃。出于时间的考虑,我选择后者。
方案四:自己完成到PCL协议的转换。但面对几百页的文档,老大直接叫我放弃。因为这个小项目只有我一个人做,如果完成这样的工作不知要做到什么时候。。。
以上四个方案中,有两个被直接否决,剩下的又卡住了。在没有新方案的现在,下星期也只能集中精力尝试方案二和方案三。