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


文章目录

  • 一、前言
  • 二、报错 ClassNotFoundException
    • 1️⃣查看报错界面
    • 2️⃣分析报错原因
    • 3️⃣解决方案
  • 三、窗口在执行完程序后直接退出
    • 1️⃣分析原因
    • 2️⃣错误的解决方案
    • 3️⃣正确的解决方案
  • 四、完整代码
  • 五、反思&总结
  • 六、结语

一、前言

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

二、报错 ClassNotFoundException

1️⃣查看报错界面

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

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

  2. 输入cmd
    将Java程序转化为exe文件时报错的解决方案(推荐初学者食用)_第1张图片

  3. 找到你的exe文件存储的位置
    这里我的文件保存在 F:\IDEA 中,所以如下操作,注意使用 cd 下一级目录名 切换目录
    将Java程序转化为exe文件时报错的解决方案(推荐初学者食用)_第2张图片
    此时报错界面就出现了 java.lang.ClassNotFoundException的报错提示

2️⃣分析报错原因

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

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

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

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

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

真正的主类长这样

将Java程序转化为exe文件时报错的解决方案(推荐初学者食用)_第5张图片
思考了一下,可能是由于 包名以及类名定义不规范 引起的,因为在定义包名时最好是公司域名反写,而类名的定义最好是英语使用中文风险极高

3️⃣解决方案

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

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

  • 类名使用全英语 maxSonArray

  • 重构类
    将Java程序转化为exe文件时报错的解决方案(推荐初学者食用)_第6张图片
    将Java程序转化为exe文件时报错的解决方案(推荐初学者食用)_第7张图片

  • 在exe4j内更改设置
    将Java程序转化为exe文件时报错的解决方案(推荐初学者食用)_第8张图片

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

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

你可能感兴趣的:(Java进阶学习篇,现代程序设计,java,intellij-idea,开发语言,jvm)