把Java程序转换成exe,可直接运行的实现

最近,项目不是很赶,突发奇想,打算写一个定时提醒的软件,设想即在某些指定的时刻,弹出弹窗,显示一些设定的话,5s之后自动关闭。

定时提示这一部分很基础,定时采用spring的@schedule的cron来设定,弹窗用Java Awt 来解决,不再赘述。项目写完之后,用maven打成jar包,用exe4j 把jar包转换成电脑 可执行文件exe。记录一下遇到的问题。

1、在springboot工程中运行程序,会提示一个java.awt.HeadlessException的错误,由于是全部解决完之后才记录,并没有上截图。

解决方法:在新建Frame或者JFrame之前,添加代码 设置系统属性。

System.setProperty("java.awt.headless", "false");

2、如何让弹窗显示5s之后关闭。

解决方法:5s可以用线程的sleep方法,但是关闭弹窗,我之前采用的是System.exit(0)。 这个虽然可以关闭,但是是强行关闭整个Java运行程序,导致程序不能继续运行,因此换成如下:

try {
  Thread.sleep(5000);
  frame.setVisible(false);//5s自动关闭
 } catch (InterruptedException e1) {
  e1.printStackTrace();
  System.exit(0);
 }

3、exe4j生成的exe运行报错,提示NoClassDefException,找不到主类。

解决方法:在生成exe的第五步,选择主类不要选择项目的主类,而是选择

org.springframework.boot.loader.PropertiesLauncher。。

即可

4、exe运行,提示没有jre环境。(在没有安装jre的机器上运行)

解决的方法:需要把生成的exe和安装好的jre文件,打包发给别人。然后保证exe必须和jre在一个文件下,正常运行

补充知识:解决子线程不共有父线程的请求上下文环境

正常的开启子线程的时候,存在一个问题。

即 子线程并不具有父线程的请求上下文环境,比如说session,子线程在请求服务器的时候是没有session的,于是服务器随机生成一个session赋给他,这就导致一个问题。比如说微服务开发的时候,需要在子线程通过feign调用其他服务的接口,而这些被调用的接口一般都需要验证是否具有权限,此时,通过子线程访问接口就会抛出401或者403的权限错误。

解决思路很简单,即开启子线程的时候,确保子线程共有父线程的请求上下文环境。只需要在启动线程之前加上如下代码即可。


/**
 * 生成日报表
 * @param日期
 * */
 @POST
 @Path(value = "/generateDayreport")
 @Operation(code = 301,desc = "生成")
 public String lookDayreport(@RequestBody String req) throws BusinessAccessException{
 ExecutorService threadPool = Executors.newFixedThreadPool(5);
 Map<String, String> map = new HashMap<>();
 JSONObject jsonObject = JSONObject.parseObject(req);
 String date = jsonObject.getString("date");
 RequestAttributes requestAttributes = RequestContextHolder.currentRequestAttributes();
 System.out.println("=ui==="+requestAttributes.getSessionId());
 RequestContextHolder.setRequestAttributes(requestAttributes, true);//子线程继承主线程的上下文
 try {
  service.insertDayreport(date, "1", "true");
  map.put("code", "1");
 } catch (Exception e) {
  // TODO: handle exception
  e.printStackTrace();
  map.put("code", "2");
 }
 GenerateDayReport generateDayReport = new GenerateDayReport(date);
 threadPool.execute(generateDayReport);
 threadPool.shutdown();
 return JSONObject.toJSONString(map);
 }

GenerateDayReport是实现Runable接口的类

以上这篇把Java程序转换成exe,可直接运行的实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • java 使用idea将工程打成jar并创建成exe文件类型执行的方法详解

    第一部分: 使用idea 打包工程jar 1.准备好一份 开发好的 可执行的 含有main方法的 工程. 例如:我随便写的main方法 public static void main(String[] args) throws IOException { Properties properties = System.getProperties(); String osName = properties.getProperty("os.name"); System.out.println

  • java 定时器线程池(ScheduledThreadPoolExecutor)的实现

    前言 定时器线程池提供了定时执行任务的能力,即可以延迟执行,可以周期性执行.但定时器线程池也还是线程池,最底层实现还是ThreadPoolExecutor,可以参考我的另外一篇文章多线程–精通ThreadPoolExecutor. 特点说明 1.构造函数 public ScheduledThreadPoolExecutor(int corePoolSize) { // 对于其他几个参数在ThreadPoolExecutor中都已经详细分析过了,所以这里,将不再展开 // 这里我们可以看到调用基类

  • Java线程池ThreadPoolExecutor原理及使用实例

    引导 要求:线程资源必须通过线程池提供,不允许在应用自行显式创建线程: 说明:使用线程池的好处是减少在创建和销毁线程上所花的时间以及系统资源的开销,解决资源不足的问题.如果不使用线程池,有可能造成系统创建大量同类线程而导致消耗内存或者"过度切换"的问题. 线程池介绍线程池概述   线程池,顾名思义是一个放着线程的池子,这个池子的线程主要是用来执行任务的.当用户提交任务时,线程池会创建线程去执行任务,若任务超过了核心线程数的时候,会在一个任务队列里进行排队等待,这个详细流程,我们会后面细

  • Java使用ExecutorService来停止线程服务

    使用ExecutorService来停止线程服务 之前的文章中我们提到了ExecutorService可以使用shutdown和shutdownNow来关闭. 这两种关闭的区别在于各自的安全性和响应性.shutdownNow强行关闭速度更快,但是风险也更大,因为任务可能正在执行的过程中被结束了.而shutdown正常关闭虽然速度比较慢,但是却更安全,因为它一直等到队列中的所有任务都执行完毕之后才关闭. 使用shutdown 我们先看一个使用shutdown的例子: public void use

  • 详解如何将JAVA程序制作成可以直接执行的exe文件

    突然心血来潮,想自己做个小程序玩玩,但是怎么把他做成一个exe文件,让大家能够更好的理解和使用呢,百度了一下,说是需要exe4j来生成,但是看了很多关于exe4j将java程序生成exe文件的教程,觉着都不是自己想要的结果,还是自己综合一下,写篇文章记录一下. 下载和安装的步骤我就略过了,直接说重点. 一 : 将写好的java程序打成jar包,如下图: 1: . 2: 3: 4: 5:此处填写MANIFEST.MF文件路径,MANIFEST.MF手动创建后放在下项目路径下即可 MANIFEST.

  • java.lang.Runtime.exec() Payload知识点详解

    有时,通过Runtime.getRuntime().exec()执行命令的有效负载有时会失败.使用Web Shell,反序列化利用或通过其他媒介时,可能会发生这种情况. 有时这是因为重定向和管道字符的使用在启动过程的上下文中没有意义.例如,在shell中执行ls> dir_listing会将当前目录的列表输出到名为dir_listing的文件中.但是在exec()函数的上下文中,该命令将被解释为获取>和dir_listing目录的列表. 有时,StringTokenizer类会破坏其中包含空格

  • Java导出Execl疑难点处理的实现

    一.背景 最近业务需求需要导出Execl,最终做出的效果如下,中间牵扯到大量的数据计算. 二.疑难问题分析 问题1:跨单元格处理及边框设置 问题2:自定义背景颜色添加 问题3:单元格中部分文字设置颜色 问题4:高度自适应处理 三.问题解决 在处理整个Excel导出中总结了很多. 整个开发过程使用的是Apache POI pom.xml <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi

  • 把Java程序转换成exe,可直接运行的实现

    最近,项目不是很赶,突发奇想,打算写一个定时提醒的软件,设想即在某些指定的时刻,弹出弹窗,显示一些设定的话,5s之后自动关闭. 定时提示这一部分很基础,定时采用spring的@schedule的cron来设定,弹窗用Java Awt 来解决,不再赘述.项目写完之后,用maven打成jar包,用exe4j 把jar包转换成电脑 可执行文件exe.记录一下遇到的问题. 1.在springboot工程中运行程序,会提示一个java.awt.HeadlessException的错误,由于是全部解决完之后

  • 将java项目打包成exe可执行文件的完整步骤

    目录 如何使用exe4j把jar打包成exe文件 一.将java程序打包成jar包 二.将打包后的jar包打包成exe可执行文件 总结 如何使用exe4j把jar打包成exe文件 最近,做了几个javafx的项目,想要把jar包打成exe的可执行软件,下面时我使用exe4j打包的方法 一.将java程序打包成jar包 1. Flie —> Project Structure (或者Ctrl+Shift+Alt+S) 2. Artifacts 设置 3. 选择要打包的项目,选择要执行的 main

  • Pyinstaller将py打包成exe的实例

    背景:分享python编写的小脚本时,拷贝代码还缺各种环境,使用Pyinstaller将py可以打包成exe,直接运行即可 1.安装pyinstaller运行时所需要的windows拓展pywin32 2.安装pyinstaller pip install pyinstaller 验证是否成功:pyinstaller -v 3.pyinstaller指令 参数 含 义 -F 只生成一个exe文件 –distpath 指定生成的exe存放的目录 –workpath 指定编译中临时文件存放的目录 -

  • 通过Py2exe将自己的python程序打包成.exe/.app的方法

    Windows 10 x64 macOS Sierra 10.12.4 Python 2.7 准备好装哔~了么,来吧,做个真正意义上的绿色小软件 Win下发布应用 起因 今天实验室同学看到我的乞丐版二输入规则器,他挺感兴趣的,也想要玩玩,但是他没有装python的环境,总不能让他一直玩我电脑吧,所以想到了将程序打包成exe,直接运行!想法一出来,根本挡不住啊,说干就干,先百度python打包exe,一大堆答案,我整理了一下,大概有Py2exe和pyinstaller两种,但是,我给你看张图 这是

  • java程序打包成exe与jar的图文教程

    Java程序打包 1.java工程源码打包成jar包 选中工程,右键选择export... 选择Runnable JAR file (1)launch configuration 启动配置,java程序的启动类,如果工程没有生成类,先执行"选中工程--run as---Java Application " (2)Export Destination 输出文件名称,要生成的jar文件 2.jar包转换成.exe 使用exe4j4.0将jar生成exe执行文件 破解的exe4j4.0可在下

  • 将java普通项目打包成exe可执行文件的步骤记录

    前言 · 提示,无论打包成jar还是exe程序,运行都需要JDK,需要给没有安装JDK的电脑安装:不会安装JDK的朋友可以参考这篇文章:https://www.jb51.net/article/179937.htm · maven项目有自己的打jar包方式,我们普通的java项目,可以安照步骤一打包成jar: 步骤一.先把项目打包成jar包 1. 打开项目结构 2. 选择jar包形式 3. 设置主类 4. 构建 5. 确认构建 6. 打包完成,在项目的out目录下有jar了. 步骤二.把jar包

  • Java jar打包成exe应用程序的详细步骤

    Java jar打包成exe应用程序,可在无JDK/JRE环境下运行 前言 近期做了一个前后端合并的spring boot项目,但是要求达成exe文件,提供给不懂电脑的小白安装使用,就去研究了半天,踩了很多坑,写这篇文章,是想看到这篇文章的人,按照我的步骤走,能少踩坑. 准备 准备工作: 一个jar包,没有bug能正常启动的jar包 exe4j,一个将jar转换成exe的工具,链接:https://www.jb51.net/softs/541579.html 一个将依赖和exe一起打成一个安装程

  • IDEA导出jar打包成exe应用程序的小结

    Java jar打包成exe应用程序,可在无JDK/JRE环境下运行 老师让做一个小项目,但是需要打包发布出来,因此在网上查了很多资料之后总结的经验. 1. IDEA导出jar包,选择 File -> Project Structure (快捷键:Ctrl+Alt+Shift+S). 2. 选中"Artifacts",点击"+"选择jar,然后选择"from modules with dependencies". 3. 选择文件图标,选中入

  • java打包成jar并执行jar包中指定的main方法

    java打包成jar jar -cvf [jar包的名字] [需要打包的文件] 执行jar包中的main方法 java -jar ****.jar 执行后总是运行指定的主方法,如果 jar 中有多个 main 方法,那么如何运行指定的 main 方法呢? 用下面的命令试试看: java -classpath ****.jar ****.****.className [args] "****.****"表示"包名": "className"表示&q

  • 把Jar文件转成exe安装文件的实现方法

    1.你要清楚的目标文件是32位还是64位的,如果生成的是32位,你就要使用32位的jre,如果生成的是64位,就要使用64位的jre. 图 1 在圆圈位置进行32bit或64bit的选择.因为我要创建的是32bit,所以就使用默认的. 2.JRE的配置(没配置好的话报各种JAVA_HOME错误): 我先创建一个文件夹叫"HJ小助手",然后把我的可执行程序limitvic1.1.jar和jre文件夹放进去,以后生成的.exe文件也放在这个目录. 图2 点击图一中的第六项JRE的searc

随机推荐