亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

把Java程序轉(zhuǎn)換成exe,可直接運(yùn)行的實(shí)現(xiàn)

 更新時(shí)間:2020年09月30日 15:37:03   作者:棒棒的胖胖  
這篇文章主要介紹了把Java程序轉(zhuǎn)換成exe,可直接運(yùn)行的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

最近,項(xiàng)目不是很趕,突發(fā)奇想,打算寫一個(gè)定時(shí)提醒的軟件,設(shè)想即在某些指定的時(shí)刻,彈出彈窗,顯示一些設(shè)定的話,5s之后自動(dòng)關(guān)閉。

定時(shí)提示這一部分很基礎(chǔ),定時(shí)采用spring的@schedule的cron來(lái)設(shè)定,彈窗用Java Awt 來(lái)解決,不再贅述。項(xiàng)目寫完之后,用maven打成jar包,用exe4j 把jar包轉(zhuǎn)換成電腦 可執(zhí)行文件exe。記錄一下遇到的問(wèn)題。

1、在springboot工程中運(yùn)行程序,會(huì)提示一個(gè)java.awt.HeadlessException的錯(cuò)誤,由于是全部解決完之后才記錄,并沒(méi)有上截圖。

解決方法:在新建Frame或者JFrame之前,添加代碼 設(shè)置系統(tǒng)屬性。

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

2、如何讓彈窗顯示5s之后關(guān)閉。

解決方法:5s可以用線程的sleep方法,但是關(guān)閉彈窗,我之前采用的是System.exit(0)。 這個(gè)雖然可以關(guān)閉,但是是強(qiáng)行關(guān)閉整個(gè)Java運(yùn)行程序,導(dǎo)致程序不能繼續(xù)運(yùn)行,因此換成如下:

try {
  Thread.sleep(5000);
  frame.setVisible(false);//5s自動(dòng)關(guān)閉
 } catch (InterruptedException e1) {
  e1.printStackTrace();
  System.exit(0);
 }

3、exe4j生成的exe運(yùn)行報(bào)錯(cuò),提示NoClassDefException,找不到主類。

解決方法:在生成exe的第五步,選擇主類不要選擇項(xiàng)目的主類,而是選擇

org.springframework.boot.loader.PropertiesLauncher。。

即可

4、exe運(yùn)行,提示沒(méi)有jre環(huán)境。(在沒(méi)有安裝jre的機(jī)器上運(yùn)行)

解決的方法:需要把生成的exe和安裝好的jre文件,打包發(fā)給別人。然后保證exe必須和jre在一個(gè)文件下,正常運(yùn)行

補(bǔ)充知識(shí):解決子線程不共有父線程的請(qǐng)求上下文環(huán)境

正常的開啟子線程的時(shí)候,存在一個(gè)問(wèn)題。

即 子線程并不具有父線程的請(qǐng)求上下文環(huán)境,比如說(shuō)session,子線程在請(qǐng)求服務(wù)器的時(shí)候是沒(méi)有session的,于是服務(wù)器隨機(jī)生成一個(gè)session賦給他,這就導(dǎo)致一個(gè)問(wèn)題。比如說(shuō)微服務(wù)開發(fā)的時(shí)候,需要在子線程通過(guò)feign調(diào)用其他服務(wù)的接口,而這些被調(diào)用的接口一般都需要驗(yàn)證是否具有權(quán)限,此時(shí),通過(guò)子線程訪問(wèn)接口就會(huì)拋出401或者403的權(quán)限錯(cuò)誤。

解決思路很簡(jiǎn)單,即開啟子線程的時(shí)候,確保子線程共有父線程的請(qǐng)求上下文環(huán)境。只需要在啟動(dòng)線程之前加上如下代碼即可。

 
/**
 * 生成日?qǐng)?bào)表
 * @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是實(shí)現(xiàn)Runable接口的類

以上這篇把Java程序轉(zhuǎn)換成exe,可直接運(yùn)行的實(shí)現(xiàn)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 淺談SpringBoot資源初始化加載的幾種方式

    淺談SpringBoot資源初始化加載的幾種方式

    在平時(shí)的業(yè)務(wù)模塊開發(fā)過(guò)程中,難免會(huì)需要做一些全局的任務(wù)、緩存、線程等等的初始化工作,那么如何解決這個(gè)問(wèn)題呢?本文就來(lái)介紹一下,感興趣的可以了解一下
    2021-07-07
  • Springboot+Shiro+Mybatis+mysql實(shí)現(xiàn)權(quán)限安全認(rèn)證的示例代碼

    Springboot+Shiro+Mybatis+mysql實(shí)現(xiàn)權(quán)限安全認(rèn)證的示例代碼

    Shiro是Apache?的一個(gè)強(qiáng)大且易用的Java安全框架,執(zhí)行身份驗(yàn)證、授權(quán)、密碼學(xué)和會(huì)話管理,Shiro?主要分為兩個(gè)部分就是認(rèn)證和授權(quán)兩部分,這篇文章主要介紹了Springboot+Shiro+Mybatis+mysql實(shí)現(xiàn)權(quán)限安全認(rèn)證的示例代碼,需要的朋友可以參考下
    2024-07-07
  • IDEA創(chuàng)建yml文件不顯示小樹葉創(chuàng)建失敗問(wèn)題的解決方法

    IDEA創(chuàng)建yml文件不顯示小樹葉創(chuàng)建失敗問(wèn)題的解決方法

    這篇文章主要介紹了IDEA創(chuàng)建yml文件不顯示小樹葉創(chuàng)建失敗問(wèn)題的解決方法,需要的朋友可以參考下
    2020-07-07
  • Java遍歷并刪除Map的四種方法對(duì)比

    Java遍歷并刪除Map的四種方法對(duì)比

    在Java中,遍歷并刪除?Map?中的元素有四種常見(jiàn)的方法,每種方法都有其適用場(chǎng)景和優(yōu)缺點(diǎn),下面小編就來(lái)和大家詳細(xì)介紹一下這幾種方法的具體實(shí)現(xiàn)吧
    2024-10-10
  • 詳解Java8 Collect收集Stream的方法

    詳解Java8 Collect收集Stream的方法

    這篇文章主要介紹了Java8-Collect收集Stream的方法,提到了收集器的作用,連接收集器的方法,需要的朋友可以參考下
    2018-04-04
  • java基礎(chǔ)知識(shí) super和this使用解析

    java基礎(chǔ)知識(shí) super和this使用解析

    這篇文章主要介紹了java基礎(chǔ)知識(shí) super和this使用解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • idea開啟熱部署Devtools的步驟詳解

    idea開啟熱部署Devtools的步驟詳解

    當(dāng)我們?cè)?nbsp;idea 中修改代碼的時(shí)候,idea 并不會(huì)自動(dòng)的重啟去響應(yīng)我們修改的內(nèi)容,而是需要我們手動(dòng)的重新啟動(dòng)項(xiàng)目才可以生效,這個(gè)是非常不方便,但是可以在 idea 中開啟這個(gè)自動(dòng)熱部署的功能,本文給大家介紹了idea開啟熱部署Devtools的步驟,需要的朋友可以參考下
    2024-03-03
  • Spring注解驅(qū)動(dòng)擴(kuò)展原理BeanFactoryPostProcessor

    Spring注解驅(qū)動(dòng)擴(kuò)展原理BeanFactoryPostProcessor

    這篇文章主要介紹了Spring注解驅(qū)動(dòng)擴(kuò)展原理BeanFactoryPostProcessor,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type異常

    Caused by: java.lang.ClassNotFoundException: org.objectweb.a

    這篇文章主要介紹了Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type異常,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Java自旋鎖的實(shí)現(xiàn)示例

    Java自旋鎖的實(shí)現(xiàn)示例

    自旋鎖是一種特殊的鎖,用于解決多線程同步問(wèn)題,本文主要介紹了Java自旋鎖的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02

最新評(píng)論