java 双击jar包闪退或没反应,使用cmd运行提示没有主清单属性
使用cmd把类打包成课双击执行的jar包,双击后没反应,然后我去修改注册表
HKEY_CLASSES_ROOT\jarfile\shell\open\command
中的默认项,把路径中的javaw改成java即可,其他部分不变
例如:"C:\ProgramFiles\Java\jre7\bin\javaw.exe"-jar"%1"%*
改为:"C:\ProgramFiles\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的好处了
本来简简单单编个小程序,结果搞来搞去运行不了,附上代码
packagemymenu;
importjava.awt.*;
importjava.awt.event.*;
importjava.io.*;
publicclassMyMenuTest
{
privateFramef;
privateMenuBarbar;
privateTextAreata;
privateMenufileMenu;
privateMenuItemopenItem,saveItem,closeItem;
privateFileDialogopenDia,saveDia;
privateFilefile;
MyMenuTest()
{
init();
}
publicvoidinit()
{
f=newFrame("mywindow");
f.setBounds(300,100,650,600);
//f.setLayout(newFlowLayout());
bar=newMenuBar();
ta=newTextArea();
fileMenu=newMenu("文件");
openItem=newMenuItem("打开");
saveItem=newMenuItem("保存");
closeItem=newMenuItem("退出");
fileMenu.add(openItem);
fileMenu.add(saveItem);
fileMenu.add(closeItem);
bar.add(fileMenu);
f.setMenuBar(bar);
openDia=newFileDialog(f,"我要打开",FileDialog.LOAD);
saveDia=newFileDialog(f,"我要保存",FileDialog.SAVE);
f.add(ta);
myEvent();
f.setVisible(true);
}
privatevoidmyEvent()
{
saveItem.addActionListener(newActionListener()
{
publicvoidactionPerformed(ActionEvente)
{
if(file==null)
{
saveDia.setVisible(true);
StringdirPath=saveDia.getDirectory();
StringfileName=saveDia.getFile();
if(dirPath==null||fileName==null)
return;
file=newFile(dirPath,fileName);
}
try
{
BufferedWriterbufw=newBufferedWriter(newFileWriter(file));
Stringtext=ta.getText();
bufw.write(text);
//bufw.flush();
bufw.close();
}
catch(IOExceptionex)
{
thrownewRuntimeException();
}
}
});
openItem.addActionListener(newActionListener()
{
publicvoidactionPerformed(ActionEvente)
{
openDia.setVisible(true);
StringdirPath=openDia.getDirectory();
StringfileName=openDia.getFile();
//System.out.println(dirPath+"..."+fileName);
if(dirPath==null||fileName==null)
return;
ta.setText("");
file=newFile(dirPath,fileName);
try
{
BufferedReaderbufr=newBufferedReader(newFileReader(file));
Stringline=null;
while((line=bufr.readLine())!=null)
{
ta.append(line+"\r\n");
}
bufr.close();
}
catch(IOExceptionex)
{
thrownewRuntimeException("读取失败");
}
}
});
closeItem.addActionListener(newActionListener()
{
publicvoidactionPerformed(ActionEvente)
{
System.exit(0);
}
});
f.addWindowListener(newWindowAdapter()
{
publicvoidwindowClosing(WindowEvente)
{
System.exit(0);
}
});
}
publicstaticvoidmain(String[]args)
{
newMyMenuTest();
}
}
------解决思路----------------------
缺少MANIFEST.MF文件,在jar包里面的META-INF目录下面
在MANIFEST.MF文件中指定执行时的main方法所在的类
参考eclipse导出jar包注意事项
------解决思路----------------------
2楼正解,直接使用eclipse导执行出可执行jar文件