D:\javaprog\902>jar -cvfm menudemo.jar  menu.txt menudemo
java.io.IOException: invalid header field
        at java.util.jar.Attributes.read(Attributes.java:410)
        at java.util.jar.Manifest.read(Manifest.java:199)
        at java.util.jar.Manifest.<init>(Manifest.java:69)
        at sun.tools.jar.Main.run(Main.java:172)
        at sun.tools.jar.Main.main(Main.java:1177)
上面是输入jar命令时的错误提示;之前menudemo.jar文件已打包好没有问题;
源代码
/*
需求:定义一个简易的窗体,在窗体中添加菜单栏,在菜单栏中加入文件菜单,和编辑菜单
      文件菜单下面有个打开子菜单,子菜单下有个文件夹子条目;
  文件菜单下还有一个退出子条目,单击退出子条目,退出该窗体;
思路:在窗体中设置菜单栏,菜单栏(MenuBar)中添加菜单(Menu);菜单下可以添加子菜单(MenuItem)
      或者子条目(单击没有其他项),子菜单下可以添加子条目;
  菜单栏没有名字,菜单和子菜单,子条目都应该要有名字
  同时给主窗体添加关闭事件监听;
  在给退出子条目添加关闭事件监听;
步骤:
*/
package menudemo;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
class MenuTest
{
private Frame frame;
private MenuBar mb;
private Menu fileMenu,openMenu,editMenu;
private MenuItem closeItem,folderItem,openFile,saveFile;
private FileDialog openDialog;
private FileDialog saveDialog;
private TextArea ta;
private File file;
MenuTest()
{
init();
}
public void init()
{
frame=new Frame("记事本");
frame.setSize(600,300);
frame.setLocation(100,100);
mb=new MenuBar();
fileMenu=new Menu("文件");
editMenu=new Menu("编辑");
openMenu=new Menu("打开");
closeItem=new MenuItem("退出");
folderItem=new MenuItem("文件夹");
openFile=new MenuItem("打开文件");
    saveFile=new MenuItem("保存文件");
openMenu.add(folderItem);
fileMenu.add(openMenu);
fileMenu.add(closeItem);
fileMenu.add(openFile);
fileMenu.add(saveFile);
mb.add(fileMenu);
mb.add(editMenu);
frame.setMenuBar(mb);
openDialog=new FileDialog(frame,"打开文件",FileDialog.LOAD);
saveDialog=new FileDialog(frame,"保存文件",FileDialog.SAVE);
ta=new TextArea();
myEvent();
frame.add(ta);
frame.setVisible(true);
}
private void frameEvent()
{
frame.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent we)
{
System.exit(0);
}
});
}
private void closeItemEvent()
{
closeItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
System.exit(0);
}
});
}
private void myEvent()
{
frameEvent();
openFileEvent();
saveFileEvent();
closeItemEvent();
}
private void openFileEvent()
{
openFile.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
ta.setText("");
openDialog.setVisible(true);
String dirpath=openDialog.getDirectory();
String filename=openDialog.getFile();
if(null==dirpath||null==filename)
return;
    file=new File(dirpath,filename);
BufferedReader br=null;
try
{
br=new BufferedReader(new FileReader(file));
String line=null;
while((line=br.readLine())!=null)
{
ta.append(line+"\r\n");
}

}
catch(IOException ioe)
{
throw new RuntimeException("读文件打开失败",ioe);
}
finally
{
try
{
if(br!=null)
br.close();
}
catch(IOException ioe)
{
throw new RuntimeException("读文件关闭失败",ioe);
}
}
}
});
}
private void saveFileEvent()
{
saveFile.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
saveDialog.setVisible(true);
if(null==file)
{
String dirpath=openDialog.getDirectory();
String filename=openDialog.getFile();
if(null==dirpath||null==filename)
return;
file=new File(dirpath,filename);
BufferedWriter bw=null;
try
{
bw=new BufferedWriter(new FileWriter(file));
bw.write(ta.getText());
bw.flush();
}
catch(IOException ioe)
{
throw new RuntimeException("写文件打开失败",ioe);
}
finally
{
try
{
if(bw!=null)
bw.close();
}
catch(IOException ioe)
{
throw new RuntimeException("写文件关闭失败",ioe);
}
}
}
}
});
}
}
public class MenuDemo
{
public static void main(String []args)
{
new MenuTest();
}
}
menu.txt 文件中的信息
main-Class:menudemo.MenuDemo

解决方案 »

  1.   

    哦哦,jar命令通过了,可是现在又出现了问题了:
    打开那个menudemo.jar 文件时提示 could not find the main class:program will exit
    我用的是win 7 的系统啊!
      

  2.   

    我的打开方式设置的是  javaw.exe 
      

  3.   

    貌似这个问题真还不好解决,我已经很多次都出现这样的问题了,你可以在控制台下使用命令打开这个jar但是双击就会出现这个错!
      

  4.   

    xp里可以配置open操作,但是win7里没有对应选项,我最近也在纠结中。
      

  5.   

    jar包中有个这个文件MANIFEST.MF,在里面加入:
    Main-Class: XXXXX.ClassName
    class则是你运行的类,要带包名
      

  6.   

    jsmooth 用这个工具 打包 就可以了  直接exe 是没问题的
    你用eclipse 吧jar 导出来 在用jsmooth 打成exe 就OK 了
      

  7.   

    额额,我还是个菜鸟啊,只能先用DOS命令行了