当前位置: 代码迷 >> J2SE >> java 双击jar包闪退或没反应,使用cmd运行提示没有主清单属性,该如何解决
  详细解决方案

java 双击jar包闪退或没反应,使用cmd运行提示没有主清单属性,该如何解决

热度:104   发布时间:2016-04-23 19:53:53.0
java 双击jar包闪退或没反应,使用cmd运行提示没有主清单属性
使用cmd把类打包成课双击执行的jar包,双击后没反应,然后我去修改注册表
    HKEY_CLASSES_ROOT\jarfile\shell\open\command
    中的默认项,把路径中的javaw改成java即可,其他部分不变
    例如:"C:\Program Files\Java\jre7\bin\javaw.exe" -jar "%1" %*
    改为:"C:\Program Files\Java\jre7\bin\java.exe" -jar "%1" %*
之后在双击jar包,弹出cmd界面一瞬间消失,本来应该出现图形界面,cmd界面直接运行jar包提示没有主清单属性

然后百度解决方法看到了
    在工具-->文件夹-->文件类型,找到jar类型,把原来的打开方式删除。然后... 
    1、打开“我的电脑”,选择“工具”菜单下的“文件夹选项(0)...”。 
    2、在“文件夹选项”对话框中选择“文件类型”选项卡。 
    3、点击“新建”按钮,输入文件扩展名“jar”。 
    4、点击“确定”按钮后,可以看到已注册的文件类型中新增了JAR文件类型。 
    5、点击“高级”按钮,出现“编辑文件类型”窗口。 
    6、点击“新建(N)...”按钮,出现“新操作”窗口。将操作命名为“open”,执行操作的应用程序        为“D:\Java\jdk1.6.0_12\jre\bin\javaw.exe -jar %1”。 
    注:D:\Java\jdk1.6.0_12 为JDK所在目录,根据个人电脑上实际环境设置。 
    7、点击“确定”按钮,回到“编辑文件类型”窗口。在操作列表框中有了“open”一项操作。 
    8、点击“确定”按钮回到“文件夹选项”窗口, 这时JAR扩展名的详细信息有了变化。 
    9、点击“关闭”按钮。这时来双击一个可运行的Jar文件(FileDigest.jar)
这里说要在文件夹选项---文件类型---高级选项里修改,但是win7的高级选项去哪了,终于发现XP的好处了
本来简简单单编个小程序,结果搞来搞去运行不了,附上代码

package mymenu;
import java.awt.*;
import java.awt.event.*;
import java.io.*;

public class MyMenuTest 
{
private Frame f;
private MenuBar bar;
private TextArea ta;
private Menu fileMenu;
private MenuItem openItem,saveItem,closeItem;
private FileDialog openDia,saveDia;
private File file;

MyMenuTest()
{
init();
}
public void init()
{
f = new Frame("my window");
f.setBounds(300,100,650,600);
//f.setLayout(new FlowLayout());

bar = new MenuBar();

ta = new TextArea();

fileMenu= new Menu("文件");

openItem = new MenuItem("打开");
saveItem = new MenuItem("保存");
closeItem =  new MenuItem("退出");

fileMenu.add(openItem);
fileMenu.add(saveItem);
fileMenu.add(closeItem);
bar.add(fileMenu);

f.setMenuBar(bar);

openDia = new FileDialog(f,"我要打开",FileDialog.LOAD);
saveDia = new FileDialog(f,"我要保存",FileDialog.SAVE);

f.add(ta);
myEvent();

f.setVisible(true);
}
private void myEvent()
{
saveItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if(file==null)
{
saveDia.setVisible(true);

String dirPath=saveDia.getDirectory();
String fileName=saveDia.getFile();
if(dirPath==null || fileName==null)
return;
file = new File(dirPath,fileName);
}
try
{
BufferedWriter bufw = new BufferedWriter(new FileWriter(file));

String text = ta.getText();

bufw.write(text);
//bufw.flush();
bufw.close();
}
catch (IOException ex)
{
throw new RuntimeException();
}
}
});
openItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
openDia.setVisible(true);
String dirPath = openDia.getDirectory();
String fileName = openDia.getFile();
//System.out.println(dirPath+"..."+fileName);
if(dirPath==null || fileName==null)
return;
ta.setText("");
file = new File(dirPath,fileName);
try
{
BufferedReader bufr = new BufferedReader(new FileReader(file));
String line = null;
while((line=bufr.readLine())!=null)
{
ta.append(line+"\r\n");
}

bufr.close();
}
catch (IOException ex)
{
throw new RuntimeException("读取失败");
}
}
});
closeItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
});
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
public static void main(String[] args) 
{
new MyMenuTest();
}
}

------解决思路----------------------
缺少 MANIFEST.MF 文件,在jar包里面的META-INF 目录下面
在 MANIFEST.MF 文件中指定执行时的main方法所在的类

参考 eclipse 导出jar包注意事项
------解决思路----------------------
2楼正解,直接使用eclipse导执行出可执行jar文件
  相关解决方案