• 将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){}
    
    • 1

    先用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
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    五、反思&总结

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

    六、结语

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

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

  • 相关阅读:
    c++:-7
    RK3566 linux添加rgb13h
    为什么创建百科词条?百科营销的作用
    【Python 千题 —— 基础篇】进制转换:十进制转十六进制
    3.24 OrCAD中移动元器件时怎么让连线不跟着元器件一起动? OrCAD中如何添加文本标注、图形标注?
    IOS安全测试学习-DVIA-v2
    十分钟带你上手egg,写自己的后端接口
    Flutter三棵树系列之详解各种Key
    SeekBar爬坑
    LNMP架构
  • 原文地址:https://blog.csdn.net/Alita233_/article/details/126443350