一、前言
在实现 “整数组中最大子数组的和” 的题目时,要将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; } }
五、反思&总结
- 要规范包名和类名的定义
- 选择选项时一定要看清楚,不能选错
- 在写代码时要单独写一行代码使得程序不会自动结束运行
- 修改完代码后要重构类并在exe4j软件中重新选择
- Jar文件一定要放在一个容易找到的路径,或者直接复制路径,否则容易找不到
六、结语
本文中碰到的问题都是作者本人在将程序转化为可执行的exe文件时碰到的问题,也在碰到问题后去某度搜索过但是没有结果,所以本文很适合那些碰到问题但又无法解决的初学者食用,如果有疑问或者想法,欢迎在评论区交流
更正:子数组的英语名称是subArray,读者若在做这题时,可将类名改为sumSubArray