java创建exe程序快捷方式

我们平时可以使用鼠标右击exe选择创建快捷方式,但是如何使用java代码创建exe的快捷方式呢?

比如说我用java写好一个程序打包成exe,这个程序可以实现开机自启动,那么我们就可以在内部代码中直接创建快捷方式然后自动复制到开机启动项目录即可实现!

开始撸代码,这里我们需要一个人家封装好的jar包,还需要一个dll文件,实际上就是加载动态库dll文件实现功能。

大家自行网上搜索:jshortcut.jar,dll:jshortcut.dll

使用方法也很简单,代码如下:

package createhortcut;import java.io.File;import net.jimmc.jshortcut.JShellLink;public class CreateShortCut {public static void main(String[] args) {boolean isSucc = createLnk("E:\\Java\\workspace\\swing\\", "ScreenShot1.0.exe","E:\\Java\\workspace\\swing\\sshot\\ScreenShot1.0.exe");System.out.println(isSucc);}public static boolean createLnk(String savePath, String appName, String exePath) {try {File f = new File(exePath);File f2 = new File(savePath);if (!f.exists() || !f2.exists()) {return false;}JShellLink link = new JShellLink();// 存放路径link.setFolder(savePath);// 快捷方式名称link.setName(appName);// 指向的exelink.setPath(exePath);link.save();return true;} catch (Throwable e) {// 是更改后的jar应用,直接全部抛出e.printStackTrace();}return false;}
}

实例化一个JShellLink对象link,设置存放路径link.setFolder(savePath);,设置快捷方式名称link.setName(appName);,设置指向的exe程序位置link.setPath(exePath);,最后保存link.save();即可。快捷方式就产生了!

就这样很简单的调用就好了。

但是当我把包含此代码的java程序打包成exe时,会报找不到dll文件的错,于是反编译此jar包,查看源码发现了小问题,当打包成exe后,程序会到exe同级文件夹下找dll文件,很是不方便,于是小改了一下代码,成功使用!

反编译代码如下:

static {try {String str1 = System.getProperty("JSHORTCUT_HOME");if (str1 != null) {localObject1 = new File(str1, "jshortcut.dll");String str2 = ((File) localObject1).getAbsolutePath();System.load(str2);} else {System.loadLibrary("jshortcut");}} catch (UnsatisfiedLinkError localUnsatisfiedLinkError) {Object localObject1 = System.getProperty("java.class.path");int i = 0;while (((String) localObject1).length() > 0) {int j = ((String) localObject1).indexOf(File.pathSeparator);Object localObject2;if (j >= 0) {localObject2 = ((String) localObject1).substring(0, j);localObject1 = ((String) localObject1).substring(j + 1);} else {localObject2 = localObject1;localObject1 = "";}if ((((String) localObject2).length() > 4) && (((String) localObject2).substring(((String) localObject2).length() - 4).toLowerCase().equals(".jar"))) {j = ((String) localObject2).lastIndexOf(File.separator);if (j > 0) {localObject2 = ((String) localObject2).substring(0, j);} else {localObject2 = ".";}}File localFile = new File((String) localObject2, "jshortcut.dll");if (localFile.exists()) {String str3 = localFile.getAbsolutePath();System.load(str3);i = 1;break;}}if (i == 0) {throw localUnsatisfiedLinkError;}}}

这是部分代码,主要功能时加载dll文件,先去找环境变量,之后没有的话再进行下一步操作,经过参考其他文章,外加百度,解决如下,这里我们之间多加一个方法,将dll文件直接放到src文件夹下,让jar包直接去加载这个地方法dll文件,我们先创建一个java项目,按照jar中创建对应的包名和类,将代码复制进去。

更改如下:

...
static {if (getFile()) {} else {try {String str1 = System.getProperty("JSHORTCUT_HOME");if (str1 != null) {localObject1 = new File(str1, "jshortcut.dll");String str2 = ((File) localObject1).getAbsolutePath();System.load(str2);} else {System.loadLibrary("jshortcut");}} catch (UnsatisfiedLinkError localUnsatisfiedLinkError) {Object localObject1 = System.getProperty("java.class.path");int i = 0;while (((String) localObject1).length() > 0) {int j = ((String) localObject1).indexOf(File.pathSeparator);Object localObject2;if (j >= 0) {localObject2 = ((String) localObject1).substring(0, j);localObject1 = ((String) localObject1).substring(j + 1);} else {localObject2 = localObject1;localObject1 = "";}if ((((String) localObject2).length() > 4) && (((String) localObject2).substring(((String) localObject2).length() - 4).toLowerCase().equals(".jar"))) {j = ((String) localObject2).lastIndexOf(File.separator);if (j > 0) {localObject2 = ((String) localObject2).substring(0, j);} else {localObject2 = ".";}}File localFile = new File((String) localObject2, "jshortcut.dll");if (localFile.exists()) {String str3 = localFile.getAbsolutePath();System.load(str3);i = 1;break;}}if (i == 0) {throw localUnsatisfiedLinkError;}}}}public static String getDirectory(String paramString) {return nGetDirectory(paramString.toLowerCase());}private static boolean getFile() {try {System.loadLibrary("jshortcut");return true;} catch (Throwable exLoadLibrary) {try {String jarPath = "net/jimmc/jshortcut/";String tmpDir = System.getProperty("java.io.tmpdir");try {String dll = "jshortcut.dll";fromJarToFs(jarPath + dll, tmpDir + dll);System.load(tmpDir + dll);} catch (UnsatisfiedLinkError e) {String dll = "jshortcut.dll";fromJarToFs(jarPath + dll, tmpDir + dll);System.load(tmpDir + dll);} catch (IOException e) {}return true;} catch (Throwable exAllFailed) {}}return false;}private static void fromJarToFs(String jarPath, String filePath) throws IOException {InputStream is = null;OutputStream os = null;try {File file = new File(filePath);if (file.exists()) {boolean success = file.delete();if (!success) {throw new IOException("Could not delete file: " + filePath);}}is = ClassLoader.getSystemClassLoader().getResourceAsStream(jarPath);os = new FileOutputStream(filePath);byte[] buffer = new byte['?'];int bytesRead;while ((bytesRead = is.read(buffer)) != -1) {os.write(buffer, 0, bytesRead);}} catch (Exception ex) {throw new IOException("FromJarToFileSystem could not load DLL: " + jarPath, ex);} finally {if (is != null) {is.close();}if (os != null) {os.close();}}}
...

再将此项目导出成jar即可。这样我们在使用此jar包创建快捷方式时,直接在项目中创建一个包net.jimmc.jshortcut,将dll放入

这样在打包成exe后也能正常使用啦!

源码:https://github.com/ricozhou/javacreateshortcut

java创建exe程序快捷方式相关推荐

  1. Windows 批处理创建当前目录程序快捷方式到桌面

    Windows 批处理创建当前目录程序快捷方式到桌面 我需要实现从这个文件夹中双击脚本,在桌面创建 Chrome 的快捷方式到桌面,并通过修改参数指定它的用户目录 --user-data-dir=Us ...

  2. java写exe程序实例,java实现可安装的exe程序实例详解

    java实现可安装的exe程序实例详解 通过编写java代码,实现可安装的exe文件的一般思路: 1.在eclipse中创建java项目,然后编写java代码,将编写好的java项目导出一个.jar格 ...

  3. java写exe程序实例_2012软考软件设计师辅导:利用JAVA执行本地EXE文件

    曾经为了这样一个需求找了很多资料,今天终于学习到了!如何利用java执行exe文件?使用java类Runtime,每个Java应用程序都有一个Runtime类实例,使应用程序能够与其运行的环境相连接. ...

  4. 在GNOME桌面上创建应用程序快捷方式

    本文主要介绍Unix类操作系统的应用程序桌面快捷方式及其文件格式定义,并以GNOME桌面为例说明Ubuntu操作系统中应用程序快捷方式的创建过程.主要包括以下几个方面: 应用程序快捷方式概述 .des ...

  5. java 执行exe程序

    /**@PARAM command指exe程序所在路径**/ public static String executeCmd(String command) throws IOException { ...

  6. java创建一个程序把输入字符串的大小写互换_8 编写程序,从键盘接收一个字符串,对字符串中的字母进行大小写互转...

    package com.test; import java.util.Scanner; /** * 8 编写程序,从键盘接收一个字符串,对字符串中的字母进行大小写互转(大写字母转成小写,小写字母转成大 ...

  7. 用java创建窗口程序,创建窗口的应用程序

    创建窗口的应用程序 通过前面的基础知识的学习,已经对ctypes库的基本功能学会了使用,为了加强这种知识训练,以及运用刚学习的知识的快乐,我们来创建一个稍稍复杂一点的应用程序.这个应用程序是所有后面应 ...

  8. java打开exe程序

    package com.test;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStre ...

  9. 怎样将计算机添加桌面快捷方式,Win10系统下如何将程序快捷方式添加到桌面上?【图文教程】...

    虽然win10系统是一个比较新的操作系统,但是还是有不少用户已经开始尝试使用.最近,有些win10用户向小编反映自己不小心把系统桌面上面的快捷方式删除了,不知道该如何重新将该程序的快捷方式添加到桌面上 ...

最新文章

  1. java数组中最小的k个元素_java – 在数组中找到k个最小整数
  2. python百度云资源-Python开发视频百度云分享
  3. 用electron-forge创建一个项目
  4. Notice of the completion of the blog migration
  5. springboot 入门教程(1)
  6. 系统架构设计师 - 系统可靠性设计
  7. php中带?错误,参考-此错误在PHP中意味着什么?
  8. Hadoop框架:HDFS简介与Shell管理命令
  9. leetcode 【 Sort List 】 python 实现
  10. 案例:演示使用beantuils的setProperty()、getProperty()和populate()方法访问JavaBean的属性
  11. MongoDB 教程 | 菜鸟教程
  12. 计算机开机桌面文件丢失怎么办,电脑重启桌面文件丢失怎么办
  13. windows 系统R配置默认多核运算
  14. data mapping
  15. win7下音频采集问题
  16. Python爬虫实例(2)--beautifulsoup的应用
  17. index.php g wap,index.php?g=Wap
  18. python程序员用什么电脑好_程序员写代码用什么电脑好,前辈们推荐一下哈?
  19. php验证码代码菜鸟教程,PHP验证码的生成
  20. Garmin 佳明 D2 charlie 设置尾翼编号

热门文章

  1. Excel调用MD5加密
  2. Android开发 ConstraintLayout布局的详解
  3. MySQL设置自增初始值和步长
  4. throw 和 throws 的区别
  5. win10升级补丁_微软官方给出无法安装WIN10更新的终极解决办法:覆盖安装
  6. libjvm.so stripped
  7. 前端自动生成Change Log的实现
  8. MySQL的下载(最新版本)(一)
  9. 用计算机画有常数的函数图像,信息技术应用 用计算机画函数图象教学实录
  10. cad渐变线怎么画_CAD中怎么填充距离渐变的线条???