jar不能双击运行(命令行可以执行)的解决方案
Java应用程序jar文件可以由 JVM(Java虚拟机)直接执行,只要操作系统安装了JVM便可以运行作为Java应用程序的jar文件,其跨平台特性使得很多工具软件都用jar方式来部署分发。可是,很多朋友遇到一个难题,那就是下载了jar文件以后在Windows中不能用鼠标双击运行(或者双击运行以后使用WinRAR或其他压缩软件打开了),这可怎么办?
解决方法:
第一步、安装java。第二步、选择默认打开程序。
安装好后,在jar文件上点击鼠标右键,在弹出的菜单中选择“打开方式”→“选择默认程序”。
在“打开方式”设置窗口中点击选中选项“始终使用选择的程序打开这种文件”前的复选框,再点击旁边的“浏览”按钮。
在java的安装路径下找到bin文件夹里的javaw.exe选定
这时已经设置了使用javaw.exe应用程序来打开jar文件,可是实际上这时双击jar文件还是没有反应,这是因为没有设置打开文件参数导致的。
用Windows+R组合键打开运行对话框,输入“regedit”,然后回车或者点击确定,打开注册表编辑器。
在注册表编辑器中,找到“HKEY_CLASSES_ROOT\\Applications\\javaw.exe\\shell\\open\\command”,双击或者右键点修改,在弹出的框中参数“-jar”(无引号),修改后的数值类似:“\”C:\\Program Files\\Java\\jre7\\bin\\javaw.exe\” -jar \”%1\””(只需要添加-jar参数,无需修改其他信息),保存并退出注册表编辑器。
现在可以通过双击运行了[奸笑]
jdk版本的选择(推荐1.8)
对java新手来说,选择jdk的版本也是个头晕的事情,今天小拿就给大家讲讲。内容包括
1.jdk从1.5到1.11,选哪个最好
2.jdk和jre的区别
一、jdk版本选择
jdk是java开发工具包,除了运行和编译相关的工具外,最重要的是封装了很多方法(function/method/api)。比如写一个输出“Hello world”的程序,直接调用System.out.println方法就好。
但是安装jdk的时候,有的人推荐1.6(也有叫6.0的),也有说用1.7和1.8的。竟然这么混乱,不如先官网看看是什么情况。
java下载官网直达:https://www.oracle.com/technetwork/java/javase/downloads/index.html
神马!真是不看不知道,一看吓一跳,jdk原来在今年的9月26日已经发布了了11.0(也就是1.11),从jdk1.5到1.11,到底选哪个版本?
问题1:JDK为什么频繁升级,从1.7到1.8、1.9、1.0、1.11?
这个问题新手可以了解下,java和C++都是高级语言,但是两者之间最大的区别就是C++底层直接调用操作系统运行硬件;而java是在操作系统之上加了一层JVM(java虚拟机),也就是运行上硬件之上的一个层级,所以一般来说C++性能更好。
早期的大型客户端游戏、网络和大数据算法、和硬件驱动都是用C++(或者C)语言来开发的。但是人无完人,语言也是这样,要不然就不会有像java、python、go等五花八门的语言。与操作系统的强锁定使C++在不同操作系统或者硬件平台运行时,都要对程序进行改进和调整。
而java因为底层有一套虚拟机的存在,号称各平台运行无障碍。现在智能电器、家居基本上跑的都是基于java语言开发的程序。
但是java说我也是运用这么广泛的语言,怎么能老戴着性能不如C++的帽子呢?所以随着技术的提高和数据结构算法的应用,通过不断的小版本(如1.8.1,1.8.2)和大版本(1.7、1.8等)的发布,jvm的性能也一直在升级,普通应用场景下,已经和C++性能相关不大。
另外,语法一直比较死板的java语言,也在吸收其它语言的精华,比如1.8引入了Lambda表达式,1.9引入var变量等。(虽然,java程序员大都不买账,一直用着原来死板的语法~~)
问题二:到底取选哪个
先给答案,选1.8或者1.9,1.8优先。
话要从Sun公司(也就是太阳)被Oracle收购说起,java原来是个开源项目,社区来维护。被收购后就带有商业和属性,Oracle公司也慢慢开始向java开刀和收费了,虽然现在jdk se 标准版还不收费,但是高级版已经向使用的企业要钱了。
有这个打算后的java语言走的路子就快了很多,比如10.0和11.0的发布就很快,一些新增的功能还需要市场来反馈是不是合理的,而且java开发依赖于很多框架(如spring),如果这些框架还没有完全支持新版本,可能就运行不起来。所以建议新版本(10.0和11.0),除非只想从语言层面去体验新功能,还是不要在实际业务开发中用。
1.5和1.6就太老了,连1.8,Oracle都发出2019年1月停止更新的通知了,我们就更不要用这些老古董了。
1.7、1.8、1.9都是成熟版本,原则上都可以选用。公司的商业项目jdk一般不轻易升级,1.9用的就比较少了,加上上面的配套框架升级速度的考虑,1.9版本第二推荐位。1.8和1.7的应用都比较广泛了,那自然选更新更高级的版本,所以,最推荐用1.8版本。
二、jdk和jre的区别
有同学在配置系统时,经常遇到jdk和jre的问题,但是也搞不清两者的区别。这里作为常识了解下,早期不知道也没什么问题。
其实从就两个词的字面就可以区分开,jdk(java development kit)是java的开发工具包,jre (java runtime environment) 是java程序的运行环境。
本地开发的时候也可以运行,但是作为网站或者项目运行时,代码都打个war包或者jar包了,跟开发相关的工具和包就没有用了。
也就是说jre是jdk的一个子集。
下图是官方1.8的文档说明:https://docs.oracle.com/javase/8/docs/
运行时使用jre而不使用jdk,一方面是为了减少硬盘空间的使用,另一方面也有一定的安全考虑,防止jdk里的一些执行命令被恶意篡改。当然,现在大部分公司运行时已经不那么区分jdk和jre了,直接在服务器上跑JDK。
JAVA零基础入门:JDK的概述及安装
一.什么是jdk
JDK(Java Development ToolKit)是Java开发工具包,JDK是整个JAVA的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API 包括rt.jar)。
JDK是java开发工具包,在其安装目录下面有五个文件夹、一些描述文件、一个src压缩文件。bin、include、lib、 jre这四个文件夹起作用。
二、jdk的作用
JDK和JRE是Java开发和运行工具,其中JDK包含了JRE,但是JRE是可以独立安装的。
JRE是Java Runtime Environment的缩写,是Java程序的运行环境。既然是运行,当然要包含JVM,也就是所谓的Java虚拟机,还有所以的Java类库的class文件,都在lib目录下,并且都打包成了jar。至于在Windows上的虚拟机是哪个文件呢?就是<JRE安装目录>/bin/server中的jvm.dll。
JDK是Java Development Kit的缩写,是Java的开发工具包,主要包含了各种类库和工具,当然也包含了另外一个JRE,那么为什么要包含另外一个JRE呢?而且<JDK安装目录>/JRE/bin目录下,包含有server一个文件夹~包含一个jvm.dll,这说明JDK提供了一个虚拟机。
另外,JDK的bin目录下有各种Java程序需要用到的命令,与JRE的bin目录最明显的区别就是JDK文件下才有javac,这一点很好理解,因为JRE只是一个运行环境而已,与开发无关。正因为如此,具备开发功能的JDK所包含的JRE下才会同时有server的JVM,而仅仅作为运行环境的JRE下,只需要server的jvm.dll就够了。
三、jdk的安装和环境变量配置
第一步:到Oracle官网下载JDK;
第二步:安装JDK,除了修改安装目录(也可不改),其他的一路【下一步】,傻瓜式安装。
第三步:配置环境变量,单击\”计算机-属性-高级系统设置\”,单击\”环境变量\”。
第四步:新建->变量名\”JAVA_HOME\”,变量值\”C:\\develop\\Java\\jdk1.8.0_191\”(即JDK的安装路径)
第五步:编辑->变量名\”Path\”,点击\”新建\”,然后输入上\”%JAVA_HOME%\\bin\”,点击\”确定\”。
第六步:测试,win+r,输入cmd,进入dos窗口,输入java -version,成功打印出版信息测安装成功。
四、环境变量详解
1.为什么要配置环境变量?
要理解环境变量的作用,我们先要明确两个概念:
1.path路径:用来指定可执行文件的搜索路径,也就是后缀名为.exe文件
2.exe文件:你桌面上快捷方式的根本,点开快捷方式相当于点开该文件;
通过一个QQ例子来讲解:
首先安装好QQ,我们不用快捷方式打开它,而是通过cmd进入dos界面,直接输入QQ,出现下面的图片。
原因是,你想让系统运行一个程序,你首先得告诉它这个程序在哪,不然系统:“WTF”;
所以我们需要将QQ的可执行文件位置告诉系统,QQ可执行文件位置如下:
所以我们在dos界面中找到QQ的可执行文件的路径,输入QQ,QQ就打开了:
但是,你关掉Dos后重新进入,输入QQ发现,又是上面的问题,这就意味着你要从Dos打开QQ的话,必须每次进入QQ.exe文件所在路径,每次都得给系统QQ.exe文件的绝对路径,这样很麻烦,于是英雄登场,一个一劳永逸的方法就是将QQ.exe的文件路径放在Path环境变量里面,以后要打开QQ就不用每次进入该路径了,下图是配上QQ.exe路径时的path变量。
接着我们dos中不给路径直接输入QQ,就可以直接打开QQ了:
总结:path变量的作用是可以让我们在没有这个应用的路径下面打开我们需要打开的应用,前提是这个应用得在环境变量里面配置了路径。
2.为啥要配置 JAVA_HOME,一定要用 JAVA_HOME 命名吗?
如果我们需要配置多个 jdk 的环境变量,我们也需要把每个目录都添加到 path 中吗?这样 path 是不是就看起来很乱了呢?这时候,我们就需要一个 JAVA_HOME 变量了。
在上面的编辑环境变量里面,我们有发现有些使用 %SystemRoot%system32 的变量值,但是我们在 cmd 中查看 path 环境变量的时候却没有发现有 %SystemRoot%system32 的字样,而是有个和他很像的 C:WINDOWSsystem32, 那是因为我们系统存在一个 SystemRoot 为变量名的变量,变量值是C:WINDOWS,而这个是隐藏的,我们无法看到,我们可以把这个变量名理解成我们 java 中的 int a = 1; int b = a; 后边的b是等于 a,而我们看到的效果是 a = 1,所以 b = 1;而不是 b = a 变量名。
总结:
1.我们电脑如果装了多个版本的 jdk,我们只需要在 JAVA_HOME 中把 jdk 的目录添加进去,而不用在 path 里面加 bin 目录的路径
2.因为有些开发工具,如(eclipse,IDEA, tomcat)都会去扫描你的JAVA_HOME变量,看看你的电脑装了几个版本的 jdk。
3.可以不用 JAVA_HOME 这个名字当参数名,那么有些软件启动需要 JAVA_HOME ,例如 tomcat,当你不用这个命名,你就需要去修改 tomcat 的 bin 目录下的 catalina.bat 文件,才能启动 tomcat。
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。