用jar发布程序时出现java.io.IOException: invalid header field 错误!!!
                  at java .util.jar.Attributes.read(Attributes.java:389)
                 at java .util.jar.Manifest.read(Manifest.java:182)
                 at java .util.jar.Manifest.(int)(Manifest.java:151)
                 at sun.tools .jar.Main.run(Main.java:151)
                 at sun.tools .jar.Main.main(Main.java:1149)
清单文件
Mymoon.mf
  Manifest-Version: 1.0
  Main-Class: MemoryGame
  Created-By: 1.2(Sun Microsystems Inc.)

解决方案 »

  1.   

    貌似是空格或空行的问题。。搜集了产生java.io.IOException:invalid header field异常的几个常见问题:
    1、Class-path: 的冒号后面要加一个空格
    java.io.IOException: invalid header field异常(tomcat5.5中) 
    是因为MAINFEST.MF文件的Class-path:后面少了一空格 Manifest-Version: 1.0 
    Class-Path: 
    2、Main-Class: 的冒号后面要加一个空格。
    java.io.IOException:invalid header field 
    at java.util.jar.Attributes.read<Attributes.java:359> 
    ar... 
    ... 
    异常位置省略。
    当时我的manifest.mf文件内容为:
    Manifest-Version: 1.0
    Main-Class:My1
    Created-By: 1.6.0_10-rc2 (Sun Microsystems Inc.)
    出现这个错误后,我反复看了命令格式和manifest的内容,并没有错误。
    后来仔细看了下正确的mf格式,发现Main-Class:My1冒号后面要加一个空格。
    正确格式如下:
    Manifest-Version: 1.0
    Main-Class: My1
    Created-By: 1.6.0_10-rc2 (Sun Microsystems Inc.)
    3、Manifest-Version: 1.0和Class-Path: 之间不允许有空行。
    今天神奇一样的遇到了一个异常:java.io.IOException: invalid header field ,昨天还好好的代码,今天就变成不能运行了。
    然后在网上查找了一下,发现原因是由于META-INF下的MANIFEST.MF文件,可是我从来没有动过这个文件啊,根据网上的解决办法,我把原来
    Manifest-Version: 1.0Class-Path: 
    变成:
    Manifest-Version: 1.0
    Class-Path: 
    也就是去掉空行,但还是没有作用,后来又去掉底下多余的空行,结果还真的不报错了!
    引自:http://hi.baidu.com/sppeivan/item/5d1f681593b31609d1d66d3d