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


一、前言

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

二、报错 ClassNotFoundException

1️⃣查看报错界面

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

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

  2. 输入cmd
    在这里插入图片描述

  3. 找到你的exe文件存储的位置
    这里我的文件保存在 F:\IDEA 中,所以如下操作,注意使用 cd 下一级目录名 切换目录
    在这里插入图片描述
    此时报错界面就出现了 java.lang.ClassNotFoundException的报错提示

2️⃣分析报错原因

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

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

在这里插入图片描述

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

在这里插入图片描述

真正的主类长这样

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

3️⃣解决方案

  • 更改项目名称 com.itheima.demo1

  • 新建一个规范的包,并在内新建一个类

  • 类名使用全英语 maxSonArray

  • 重构类
    在这里插入图片描述
    在这里插入图片描述

  • 在exe4j内更改设置
    在这里插入图片描述

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

1️⃣分析原因

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

2️⃣错误的解决方案

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

3️⃣正确的解决方案

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

while(true){}

先用IDEA来测试一下,发现该解决方法可行
在这里插入图片描述

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

在这里插入图片描述

四、完整代码

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

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alita11101_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值