将Java程序转化为exe文件时报错的解决方案(推荐初学者食用)

简介: 在实现 “整数组中最大子数组的和” 的题目时,要将Java程序转换为可执行的exe文件时遇到了一系列初学者都会遇到的问题,在此详细罗列问题及其解决方案

一、前言


在实现 “整数组中最大子数组的和” 的题目时,要将Java程序转换为可执行的exe文件时遇到了一系列初学者都会遇到的问题,在此详细罗列问题及其解决方案


二、报错 ClassNotFoundException


1️⃣查看报错界面


当我将Java文件转换为Jar后再使用exe4j软件转换为exe文件时,发现打开的exe文件(控制台)执行完直接退出,甚至看不清写的什么,于是通过下列步骤可以知道控制台输出内容是什


1.使用 Win+R 键打开运行命令框

2.输入cmd


8914fd36589949bcaf311662c995794a.png


3.找到你的exe文件存储的位置

这里我的文件保存在 F:\IDEA 中,所以如下操作,注意使用 cd 下一级目录名 切换目录


8c5dab1fa5204da88235807cefe5870f.png


此时报错界面就出现了 java.lang.ClassNotFoundException的报错提示


2️⃣分析报错原因


ClassNotFoundException翻译过来就是无法找到指定的类异常,那么问题就出在将 Java程序转换为Jar文件这一步


于是我打开IDEA查看,发现红色箭头指的两个地方不相同,应该选择第二个MyCode,与自己建的项目名称相同


c8a502495ea548f39b6c79d0791604c0.png


当我修改完成以后,在选择主要类时,在选择栏并没有我们想要的类名,于是点击 Project查看,发现 程序并不是主类


78b870ba516b41d3a7c0603819890508.png


真正的主类长这样


9c39f30ae322406d8b844a9cf317c67b.png


思考了一下,可能是由于 包名以及类名定义不规范 引起的,因为在定义包名时最好是公司域名反写,而类名的定义最好是英语使用中文风险极高


3️⃣解决方案


  • 更改项目名称 com.itheima.demo1
  • 新建一个规范的包,并在内新建一个类
  • 类名使用全英语 maxSonArray
  • 重构类


62f5cfdd25cc4e01a3e36e6041882ff2.png

28897ce35b08402191e8425dc41f1915.png


  • 在exe4j内更改设置


e99f8ae1afeb4fc081767f7941400d81.png


三、窗口在执行完程序后直接退出


1️⃣分析原因


由于 程序运行结束 了,所以会直接关闭窗口


2️⃣错误的解决方案


当我想到让程序一直运行就可以避免直接关闭窗口时,我选择在main方法中套了个外循环while(true)使得程序一直运行,但是依然会关闭窗口


3️⃣正确的解决方案


在main方法执行完毕后加一个空循环,这样程序会一直处于运行状态而不结束


while(true){}


先用IDEA来测试一下,发现该解决方法可行


30472c45ba9946e0862f10a1b0586946.png


我们再打开exe文件运行,发现没有退出程序


a7e409bbd2464ab495be7fd41b68f8d6.png


四、完整代码


public class maxSonArray {
    public static void main(String[] args) {
            //初始化数组
            int[] arr = {8, 2, 6, 2, 1, 24, 9};
            //打印输出结果,使得控制台上只显示运行结果
            System.out.println(maxSonArray(arr));
            //使得程序一直处于运行状态
            while (true){}
    }
    //定义方法求子数组最大值
    public static int maxSonArray(int [] a){
        //初始化最小值
        int max = Integer.MIN_VALUE;
        //循环求最大值
        for (int i = 0; i < a.length; i++) {
            int sum = 0;
            for (int j = i + 1; j < a.length; j++){
                sum += a[j];
                if(sum > max){
                    max = sum;
                }
            }
        }
        return max;
    }
}


五、反思&总结


  1. 要规范包名和类名的定义
  2. 选择选项时一定要看清楚,不能选错
  3. 在写代码时要单独写一行代码使得程序不会自动结束运行
  4. 修改完代码后要重构类并在exe4j软件中重新选择
  5. Jar文件一定要放在一个容易找到的路径,或者直接复制路径,否则容易找不到


六、结语


本文中碰到的问题都是作者本人在将程序转化为可执行的exe文件时碰到的问题,也在碰到问题后去某度搜索过但是没有结果,所以本文很适合那些碰到问题但又无法解决的初学者食用,如果有疑问或者想法,欢迎在评论区交流


更正:子数组的英语名称是subArray,读者若在做这题时,可将类名改为sumSubArray

相关文章
|
1月前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
74 9
|
16天前
|
Java
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
80 34
|
26天前
|
设计模式 Java 开发者
Java多线程编程的陷阱与解决方案####
本文深入探讨了Java多线程编程中常见的问题及其解决策略。通过分析竞态条件、死锁、活锁等典型场景,并结合代码示例和实用技巧,帮助开发者有效避免这些陷阱,提升并发程序的稳定性和性能。 ####
|
19小时前
|
JSON 前端开发 Java
【Bug合集】——Java大小写引起传参失败,获取值为null的解决方案
类中成员变量命名问题引起传送json字符串,但是变量为null的情况做出解释,@Data注解(Spring自动生成的get和set方法)和@JsonProperty
|
1月前
|
消息中间件 存储 Java
RocketMQ文件刷盘机制深度解析与Java模拟实现
【11月更文挑战第22天】在现代分布式系统中,消息队列(Message Queue, MQ)作为一种重要的中间件,扮演着连接不同服务、实现异步通信和消息解耦的关键角色。Apache RocketMQ作为一款高性能的分布式消息中间件,广泛应用于实时数据流处理、日志流处理等场景。为了保证消息的可靠性,RocketMQ引入了一种称为“刷盘”的机制,将消息从内存写入到磁盘中,确保消息持久化。本文将从底层原理、业务场景、概念、功能点等方面深入解析RocketMQ的文件刷盘机制,并使用Java模拟实现类似的功能。
42 3
|
1月前
|
Java 测试技术 Maven
Maven clean 提示文件 java.io.IOException
在使用Maven进行项目打包时,遇到了`Failed to delete`错误,尝试手动删除目标文件也失败,提示`java.io.IOException`。经过分析,发现问题是由于`sys-info.log`文件被其他进程占用。解决方法是关闭IDEA和相关Java进程,清理隐藏的Java进程后重新尝试Maven clean操作。最终问题得以解决。总结:遇到此类问题时,可以通过任务管理器清理相关进程或重启电脑来解决。
|
1月前
|
IDE Java 编译器
开发 Java 程序一定要安装 JDK 吗
开发Java程序通常需要安装JDK(Java Development Kit),因为它包含了编译、运行和调试Java程序所需的各种工具和环境。不过,某些集成开发环境(IDE)可能内置了JDK,或可使用在线Java编辑器,无需单独安装。
72 1
|
1月前
|
安全 Java 开发者
Java多线程编程中的常见问题与解决方案
本文深入探讨了Java多线程编程中常见的问题,包括线程安全问题、死锁、竞态条件等,并提供了相应的解决策略。文章首先介绍了多线程的基础知识,随后详细分析了每个问题的产生原因和典型场景,最后提出了实用的解决方案,旨在帮助开发者提高多线程程序的稳定性和性能。
|
27天前
|
SQL 安全 Java
Java 异常处理:筑牢程序稳定性的 “安全网”
本文深入探讨Java异常处理,涵盖异常的基础分类、处理机制及最佳实践。从`Error`与`Exception`的区分,到`try-catch-finally`和`throws`的运用,再到自定义异常的设计,全面解析如何有效管理程序中的异常情况,提升代码的健壮性和可维护性。通过实例代码,帮助开发者掌握异常处理技巧,确保程序稳定运行。
40 0