最近给产品打installer时,能够成功通过installanywhere生成安装包,但安装时,不能成功运行,切换到console模式,再次打成安装包,安装,运行,报以下错误:
Unable to locate the application's 'main' class. The class 'demos.common4swt.XxxLauncher' must be public and have a 'public static void main(String
[])' method. (LAX)
Unable to Launch Java Application: Unable to locate the application's 'main' class. The class 'demos.common4swt.XxxLauncher'' must be public and hav
e a 'public static void main(String[])' method. (LAX)
因为之前做测试的时候,通过调整lax.class.path,能够成功地打成安装包并且成功运行。做测试时是在真实机子做测试:win7, jdk6-64bit, installanywhere8未破解版本(公司不允许使用破解、盗版之类的软件,试用期过了之后,不能在相同的机子重复安装,用一些软件清除了注册表之后还是不能安装,所以这几天的工作是在虚拟机进行,环境是xp, jdk6-32bit, installanywhere8未破解版本)。
根据前面的测试,怀疑的重点就在lax.class.path,不厌其烦地反复修改、打包、安装测试,但都是无功而疾。又把安装包从虚拟机拷贝到真实机子安装,还是不行,实在没辙了。打开安装目录的bin目录下,看到有一个xxx.lax文件,用editplus打开,手工修改lax.class.path,直接运行,还是不行。接着仔细地看一遍该文件,发现有一个lax.nl.current.vm的属性,当前指向jdk1.5,就在想,如果改为更高版本的jdk会怎样呢。因为当前机子的jdk1.6是64位的,改了之后,就可以运行了,看来还真是JDK不兼容导致了,后来发现,产品用的SWT是64位的。
问题虽然得到解决了,但是,为什么installanywhere的那个报错提示,那么让人费解呢,为什么不直接报64bit的SWT与32bit的JVM不兼容呢?
产品用的SWT(SWT对应的功能是新功能)是64位的,发现64位的SWT只能是64位的JVM上运行,32位的SWT也只能在32位的JVM上运行,而且产品在安装时,用户还可以手工选择JVM,接下来,处理SWT与JVM的兼容问题