论文部分内容阅读
摘要:Jar文件是Java 的可执行文件,在安装有JRE的机器上可以直接执行。然而实际操作时常常会遇到显示“could not find the main class. program will exit”无法执行的故障,有时虽能执行但无图片显示,或音乐失声,或干脆无反应。本文将针对这些执行故障进行分析,并提出排除和解决的方法。
关键词:Java;Jar文件;故障排解
中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)21-30465-02
Jar File’s Running Troubleshooting
YANG Pei-li
(Department of Electronic and Information Engineering, Shazhou Professional Institute of Technology, Zhangjiagang 215600, China)
Abstract: Jar file is Java executable file, it can be executed on the any machines with JRE. However, in the actual operation we often been told "could not find the main class. Program will exit", and the program will stop running. Sometime program can run,but no picture, or no music, or no response. This paper will analysis these running trouble, and proposed solutions.
Key words: Java; Jar file; Troubleshooting
1 引言
Jar是“java archive file”的简略表示,Jar文件是Java的压缩文件。Jar文件通常用来压缩保存多个class文
件,可置入标明主类的文件manifest.mf,这样在装有JRE的机器上双击Jar文件,即可执行。Jar文件常可用于Java应用软件的包装发布。
虽然Jar文件容易建立,但要创建一个可正常执行的Jar文件,还是需要关注多个方面的细枝末节。另外环境变量的设置和关联程序的格式设置也非常重要,任何一个方面的差错就会导致Jar文件执行故障。本文旨在探讨Jar文件常见的执行故障和排解方法。
2 生成了却不可正常执行
Jar文件通常是在提示符窗口下,利用JDK附带的jar.exe,对已编译的class文件进行包装而生成的。jar.exe的命令格式:
jar 参数 [jar-file] [manifest-file] classfiles
Jar文件执行故障中,最常见的是包装生成了Jar文件,却不可正常执行,显示错误信息“could not find the main class. program will exit”。这很大的可能是使用jar.exe命令时,对两个细节的把握不当所致:
1)Jar命令的参数选择
Jar命令的参数应选“cfm”或者“cvfm”,其中涉及的每个字母的含意如下:
-c创建新的归档文件
-v在标准输出中生成详细输出
-f指定归档文件名
-m包含指定清单文件中的清单信息
2)标明文件格式
标明文件可用任何文本编辑器建立,文件内容有固定的格式,通常由两行组成(假定主类为Hello.class):
第一行:Main-Class: Hello
第二行:空行
第一行中的“Main-class:”和类名之间必须要有一个空格,主类名后不用“.class”的后缀。第二行则什么也不用输入,只需保证存在。
注意上述细节以后,则可以排除因Jar文件本身的问题而不能执行的故障。
3 它机可执行本机不可执行
“Write once, run anywhere”,这是Java的招牌——一处编写,处处可运行,大家来使用Java语言编程吧。
然而实际设计中,经常会遇到这样的执行故障:生成的Jar文件竟然会挑剔机器,那台上可良好运行,这台上一堆错误信息。
它机可执行,说明Jar文件本身没有问题;本机不可执行,问题应该是在本机上。此时需要逐个验证如下环节,直到问题解决:
1)RE安装
2)环境变量的设置
主要设定classpath,类似:C:\Program Files\Java\jre1.6.0_04\lib
3)关联程序的设定
关联程序通常是javaw.exe,在打开方式下直接可关联。
4)注册表检查
在某些机器上进行以上核查后,Jar文件还是不能正常执行,这时需要按如下步骤检查注册表:
①识别.jar文件为jarfile
HKEY_CLASSES_ROOT\.jar
(默认)jarfile
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.jar
(默认)jarfile
②给jarfile文件设定关联程序
HKEY_CLASSES_ROOT\jarfile
(默认)Executable Jar File
HKEY_CLASSES_ROOT\jarfile\shell\open\command
(默认)"C:\Program Files\Java\jre1.6.0_04\bin\javaw.exe" -jar "%1"
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Jarfile\shell\open\command:
(默认)"C:\Program Files\Java\jre1.6.0_04\bin\javaw.exe" -jar "%1"
③设定关联程序javaw.exe的执行格式
HKEY_CLASSES_ROOT\Applications\javaw.exe\shell\open\command
(默认)"C:\Program Files\Java\jre1.6.0_04\bin\javaw.exe" -jar "%1"
HKEY_CURRENT_USER\Software\Classes\Applications\javaw.exe\shell\open\command
(默认)"C:\Program Files\Java\jre1.6.0_04\bin\javaw.exe" -jar "%1"
④jar文件的打开方式列表
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.jar\OpenWithList
(默认)javaw.exe
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.jar\OpenWithProgids
"WinRAR"=hex(0):
"jarfile"=hex(0):
OpenWithList项下有多条记录时,jar默认关联程序(即打开方式)就有多个,可对y该项下的记录进行清理,清除不必要的或错误的关联方式。
OpenWithProgids指示了对.jar文件的处理方案,可兼选针对jarfile和WinRAR的两种。
4 可执行但无对应结果
我们有时会发现Jar文件可执行而无预期结果的现象,其实这并不是一个错误。
javaw.exe是没有对应的控制台窗口的,如果Java程序是在字符窗口下进行输入和输出那么包装成的Jar文件,双击执行时没有错误发生,但也没有运行过程和结果。这是因为Jar默认由javaw.exe执行,而javaw.exe不象java.exe一样可提供一个相应的窗口来演示程序的运行。
对于个别纯字符窗口运行的Jar文件,我们可以先打开一个字符窗口(即command命令窗口),在命令窗口中执行:
java–jarjar文件
这时字符窗口的输入和输出就能正常进行了。
需要注意的是字符窗口中的命令格式,用java.exe命令方式执行时,class文件可不带后缀名,如“java Hello”,但用java.exe执行Jar文件则一定要带上后缀名,如“java–jar Hello.jar”,否则将出现“Unable to access jarfile…”的错误信息。
5 可执行但图片不显示
对于可显示图片的GUI程序,有时会发现窗口中该有图片显示的地方缺了图片,其他运行情况正常,这是因为Jar文件运行时没有访问到对应的图片文件。
Jar文件中包含的图片文件是不能被Jar文件运行时读到的,声音文件、文本文件等其他文件也类同。Java软件包装时应注意这一点,将class文件归并到一个Jar文件中,其他的文件应另外存放。如:
如上,将Note.jar要访问的三个文件独立存放在jar包外,访问方能正常进行。在程序访问多文件的情况下,可把要访问的文件等归并到一个文件夹,在Java程序中有关访问文件的方法参数作相应修改即可。
6 结束语
跨平台的java语言编出的程序“一次编写,处处运行”,这使得Java语言越来越得人心,Java应用程序包装成可执行的Jar文件,可以缩短内存加载时间,也方便了java程序的执行。尤其对于Java初学者,这是富有趣味的,同时也是一个挑战。用Jar.exe对java application打包生成可执行的jar文件,时会遇到一些疑难故障,本文就此作了探讨和解决。
参考文献:
[1] Bruce Eckel.Java编程思想[M].3版.北京:机械工业出版社,2005.
[2] 张洪斌.Java程序设计百事通[M].北京:清华大学出版社,2001.
关键词:Java;Jar文件;故障排解
中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)21-30465-02
Jar File’s Running Troubleshooting
YANG Pei-li
(Department of Electronic and Information Engineering, Shazhou Professional Institute of Technology, Zhangjiagang 215600, China)
Abstract: Jar file is Java executable file, it can be executed on the any machines with JRE. However, in the actual operation we often been told "could not find the main class. Program will exit", and the program will stop running. Sometime program can run,but no picture, or no music, or no response. This paper will analysis these running trouble, and proposed solutions.
Key words: Java; Jar file; Troubleshooting
1 引言
Jar是“java archive file”的简略表示,Jar文件是Java的压缩文件。Jar文件通常用来压缩保存多个class文
件,可置入标明主类的文件manifest.mf,这样在装有JRE的机器上双击Jar文件,即可执行。Jar文件常可用于Java应用软件的包装发布。
虽然Jar文件容易建立,但要创建一个可正常执行的Jar文件,还是需要关注多个方面的细枝末节。另外环境变量的设置和关联程序的格式设置也非常重要,任何一个方面的差错就会导致Jar文件执行故障。本文旨在探讨Jar文件常见的执行故障和排解方法。
2 生成了却不可正常执行
Jar文件通常是在提示符窗口下,利用JDK附带的jar.exe,对已编译的class文件进行包装而生成的。jar.exe的命令格式:
jar 参数 [jar-file] [manifest-file] classfiles
Jar文件执行故障中,最常见的是包装生成了Jar文件,却不可正常执行,显示错误信息“could not find the main class. program will exit”。这很大的可能是使用jar.exe命令时,对两个细节的把握不当所致:
1)Jar命令的参数选择
Jar命令的参数应选“cfm”或者“cvfm”,其中涉及的每个字母的含意如下:
-c创建新的归档文件
-v在标准输出中生成详细输出
-f指定归档文件名
-m包含指定清单文件中的清单信息
2)标明文件格式
标明文件可用任何文本编辑器建立,文件内容有固定的格式,通常由两行组成(假定主类为Hello.class):
第一行:Main-Class: Hello
第二行:空行
第一行中的“Main-class:”和类名之间必须要有一个空格,主类名后不用“.class”的后缀。第二行则什么也不用输入,只需保证存在。
注意上述细节以后,则可以排除因Jar文件本身的问题而不能执行的故障。
3 它机可执行本机不可执行
“Write once, run anywhere”,这是Java的招牌——一处编写,处处可运行,大家来使用Java语言编程吧。
然而实际设计中,经常会遇到这样的执行故障:生成的Jar文件竟然会挑剔机器,那台上可良好运行,这台上一堆错误信息。
它机可执行,说明Jar文件本身没有问题;本机不可执行,问题应该是在本机上。此时需要逐个验证如下环节,直到问题解决:
1)RE安装
2)环境变量的设置
主要设定classpath,类似:C:\Program Files\Java\jre1.6.0_04\lib
3)关联程序的设定
关联程序通常是javaw.exe,在打开方式下直接可关联。
4)注册表检查
在某些机器上进行以上核查后,Jar文件还是不能正常执行,这时需要按如下步骤检查注册表:
①识别.jar文件为jarfile
HKEY_CLASSES_ROOT\.jar
(默认)jarfile
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.jar
(默认)jarfile
②给jarfile文件设定关联程序
HKEY_CLASSES_ROOT\jarfile
(默认)Executable Jar File
HKEY_CLASSES_ROOT\jarfile\shell\open\command
(默认)"C:\Program Files\Java\jre1.6.0_04\bin\javaw.exe" -jar "%1"
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Jarfile\shell\open\command:
(默认)"C:\Program Files\Java\jre1.6.0_04\bin\javaw.exe" -jar "%1"
③设定关联程序javaw.exe的执行格式
HKEY_CLASSES_ROOT\Applications\javaw.exe\shell\open\command
(默认)"C:\Program Files\Java\jre1.6.0_04\bin\javaw.exe" -jar "%1"
HKEY_CURRENT_USER\Software\Classes\Applications\javaw.exe\shell\open\command
(默认)"C:\Program Files\Java\jre1.6.0_04\bin\javaw.exe" -jar "%1"
④jar文件的打开方式列表
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.jar\OpenWithList
(默认)javaw.exe
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.jar\OpenWithProgids
"WinRAR"=hex(0):
"jarfile"=hex(0):
OpenWithList项下有多条记录时,jar默认关联程序(即打开方式)就有多个,可对y该项下的记录进行清理,清除不必要的或错误的关联方式。
OpenWithProgids指示了对.jar文件的处理方案,可兼选针对jarfile和WinRAR的两种。
4 可执行但无对应结果
我们有时会发现Jar文件可执行而无预期结果的现象,其实这并不是一个错误。
javaw.exe是没有对应的控制台窗口的,如果Java程序是在字符窗口下进行输入和输出那么包装成的Jar文件,双击执行时没有错误发生,但也没有运行过程和结果。这是因为Jar默认由javaw.exe执行,而javaw.exe不象java.exe一样可提供一个相应的窗口来演示程序的运行。
对于个别纯字符窗口运行的Jar文件,我们可以先打开一个字符窗口(即command命令窗口),在命令窗口中执行:
java–jarjar文件
这时字符窗口的输入和输出就能正常进行了。
需要注意的是字符窗口中的命令格式,用java.exe命令方式执行时,class文件可不带后缀名,如“java Hello”,但用java.exe执行Jar文件则一定要带上后缀名,如“java–jar Hello.jar”,否则将出现“Unable to access jarfile…”的错误信息。
5 可执行但图片不显示
对于可显示图片的GUI程序,有时会发现窗口中该有图片显示的地方缺了图片,其他运行情况正常,这是因为Jar文件运行时没有访问到对应的图片文件。
Jar文件中包含的图片文件是不能被Jar文件运行时读到的,声音文件、文本文件等其他文件也类同。Java软件包装时应注意这一点,将class文件归并到一个Jar文件中,其他的文件应另外存放。如:
如上,将Note.jar要访问的三个文件独立存放在jar包外,访问方能正常进行。在程序访问多文件的情况下,可把要访问的文件等归并到一个文件夹,在Java程序中有关访问文件的方法参数作相应修改即可。
6 结束语
跨平台的java语言编出的程序“一次编写,处处运行”,这使得Java语言越来越得人心,Java应用程序包装成可执行的Jar文件,可以缩短内存加载时间,也方便了java程序的执行。尤其对于Java初学者,这是富有趣味的,同时也是一个挑战。用Jar.exe对java application打包生成可执行的jar文件,时会遇到一些疑难故障,本文就此作了探讨和解决。
参考文献:
[1] Bruce Eckel.Java编程思想[M].3版.北京:机械工业出版社,2005.
[2] 张洪斌.Java程序设计百事通[M].北京:清华大学出版社,2001.