为什么我的java环境变量设置对了,jar程序还是不能双击运行?

为什么我的java环境变量设置对了,jar程序还是不能双击运行?,第1张

有两种方法:
第一种:用dows命令javaw -jar yanleijar
第二种:注册表项的路径为:
\HKEY_CLASSES_ROOT\Aplications\javawexe\shell\open\command
的值
"E:\JDK\jdk170_51\jre\bin\javawexe" "%1"
修改为
"E:\JDK\jdk170_51\jre\bin\javawexe" -jar "%1"
然后把jar文件默认打开方式设置为E:\JDK\jdk170_51\jre\bin\javawexe就可以双击运行了
最后补充下相关知识:
一个程序打jar包后,必须要在解压软件中打开,在清单文件上MANIFESTMF添加(注意:后面一定是要有空格) Main-Class: 包名类名
jar包双击运行仅对于图形化界面的程序起作用,对控制台的程序不起作用。
javaexe适合用于启动window console控制台程序
javawexe适合用于启动GUI程序
javawsexe适合用于web程序。

java程序转成jar 之后就实现双击文件的实现用集成开发环境就很简单。
如在NETBEANS中,菜单“生成”-“生成主项目”
然后在项目文件夹中,会生成一个dist文件夹,其中可以发现生成了jar文件,这个文件是可以双击打开运行程序,与文件位置无关。

直接在JBuilder中新建一个应用程序 至于具体步骤就不描述了 此代码没有main函数无法直接运行 下面我贴出在Frame 中的代码 import java awt ;import java awt event ;import javax swing ;import borland jbcl layout ;import java util Date;public class Frame extends JFrame {JPanel contentPane;BorderLayout borderLayout = new BorderLayout();JPanel jPanel = new JPanel();XYLayout xYLayout = new XYLayout();JScrollPane jScrollPane = new JScrollPane();JList jList = new JList();//初始化的JList中的数据String[] strData = { One Tow Three };//保存点击按钮的时间long clickTime = ;//Construct the framepublic Frame () {enableEvents(AWTEvent WINDOW_EVENT_MASK);try {jbInit();}catch (Exception e) {e printStackTrace();}}//Component initializationprivate void jbInit() throws Exception {contentPane = (JPanel)this getContentPane();contentPane setLayout(borderLayout );this setSize(new Dimension( ));this setTitle( Frame Title );jPanel setLayout(xYLayout );jList addMouseListener(new Frame _jList _mouseAdapter(this));contentPane add(jPanel BorderLayout CENTER);jPanel add(jScrollPane new XYConstraints( ));jScrollPane getViewport() add(jList null);jList setListData(strData);}//Overridden so we can exit when window is closedprotected void processWindowEvent(WindowEvent e) {super processWindowEvent(e);if (e getID() == WindowEvent WINDOW_CLOSING) {System exit( );}}//具体实现按钮双击的功能的方法很简单的算法 不做解释了public boolean checkClickTime() {long nowTime = (new Date()) getTime();if ( (nowTime clickTime) < ) {clickTime = nowTime;return true;}clickTime = nowTime;return false;}void jList _mouseReleased(MouseEvent e) {//判断是否双击 是的话写你要实现的功能if (checkClickTime()) {System out println( Click Double );}}}class Frame _jList _mouseAdapterextends java awt event MouseAdapter {Frame adaptee;Frame _jList _mouseAdapter(Frame adaptee) {this adaptee = adaptee;}public void mouseReleased(MouseEvent e) {adaptee jList _mouseReleased(e);}} lishixinzhi/Article/program/Java/hx/201311/25810

是你的判断有问题吧,没判断当前窗体是否是最大化,不知道理解的对不对。
import javaxswing;
import javaawtevent;
import javaawt;
public class MouseDemo extends JFrame {
private static final long serialVersionUID = 1L;
boolean IS_MAXIMIZED = false;
public MouseDemo() {
super("DoubleClick Demo");
thisaddMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (egetClickCount() == 2) {
if (IS_MAXIMIZED) {
setExtendedState(JFrameNORMAL);
IS_MAXIMIZED = false;
} else {
setExtendedState(JFrameMAXIMIZED_BOTH);
IS_MAXIMIZED = true;
}
}
}
});
thissetSize(new Dimension(200, 150));
thissetDefaultCloseOperation(JFrameEXIT_ON_CLOSE);
}
public static void main(String args[]) {
new MouseDemo()setVisible(true);
}
}

exe是做不出来的
java程序是通过javaexe去加载class文件执行的所以,不可能打包成EXE
把CLASS文件打包成JAR文件,并加入MANIFEST是可以达到在WINDOWS下双击而启动的
1,MANIFEST文件的准备
目录:
META-INF\MANIFESTMF
内容:
Manifest-Version: 10
Created-By: 142_04 (Sun Microsystems Inc)
Main-Class: 你的启动类名
2,打包JAR文件
jar cvfm Abcjar META-INF\MANIFESTMF class


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13376249.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-24
下一篇 2023-07-24

发表评论

登录后才能评论

评论列表(0条)

保存