为了账号安全,请及时绑定邮箱和手机立即绑定

如何解决此 ArrayIndexOutOfBoundsException 在一台计算机上工作?

如何解决此 ArrayIndexOutOfBoundsException 在一台计算机上工作?

牧羊人nacy 2022-08-17 15:56:10
所以我不知道如何去做这个。我使用Eclipse作为我的IDE,并通过它导出一个可运行的jar。以前一切都工作正常,除了现在我有一个ComboBox并用数组(FX.收藏品)。我在Windows 7计算机上运行它,在那里我进行开发,然后我将其移动到我的Windows 10计算机上,在那里我进行测试以确保一切正常,但在这种情况下不是这样。OutOfBoundsException通常很容易处理,但我不知道如何处理此异常,因为它在一台计算机上工作(没有运行时异常),而在另一台计算机中则有此异常:Exception in Application start methodjava.lang.reflect.InvocationTargetExceptionat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)at java.lang.reflect.Method.invoke(Unknown Source)at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)at java.lang.reflect.Method.invoke(Unknown Source)at sun.launcher.LauncherHelper$FXHelper.main(Unknown Source)Caused by: java.lang.RuntimeException: Exception in Application start methodat com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$159(LauncherImpl.java:182)at java.lang.Thread.run(Unknown Source)我尝试了4种不同的Java版本(1.8.0_181,_192,_201,_202)。我尝试在代码的不同部分更改从excel文件中读取的双精度类型。我已尝试将 ArrayList 的类型从 、 和 。我已经更改了加载代码的位置。它总是去这部分:certNumbersFound.get(certNumbersFound.size()-1)我一直认为这没关系,但什么是更好的方法呢?还是我只是运气不好?我还在 main 的 launch(args) 方法之前对 ArrayList 进行了 System.out.println-ed,并在放入 ArrayList 的 get 方法之前将 certNumbersFound.size()-1 放入它自己的对象中。
查看完整描述

2 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

我检查了如果文件不存在,将使用适当的模板创建一个新文件作为冗余。但!这并不意味着模板中有任何值来加载 ArrayList。


它在我的Windows 7计算机(开发计算机)上运行的唯一原因是因为它有一个测试文件,模板中已经有数字,所以它从来没有像我的Windows 10(测试计算机)那样从头开始运行。


我必须添加一个方法或if语句说:


if(certNumbersFound != null && certNumbersFound.size() > 0)

{

  //Write code that can use the ArrayList certNumbersFound

  //because there's values in the file

}

else

{

  //Write code that doesn't use the ArrayList certNumbersFound

  //because there's no values in the file.

}

我觉得自己太笨了。谢谢大家。我很抱歉浪费你的时间。


查看完整回答
反对 回复 2022-08-17
?
狐的传说

TA贡献1804条经验 获得超3个赞

ArrayList.get如果索引超出范围,则抛出。在您的情况下,可能小于零。IndexOutOfBoundsException


要避免这种情况,请在代码中添加检查:


ArrayList<Integer> certNumbersFound = workbook.getCertNumbers();

if (certNumbersFound.size() >= 1) {

    int lastNumber = certNumbersFound.get(certNumbersFound.size()-1);

    //more code

}

else {

    //handle situation according to your needs

    //e.g. throw exception, log something or write to err: 

    System.err.println("Invalid size: " + certNumbersFound.size());

}

从外部源(在本例中为 Excel 文件)读取数据时,引入安全检查始终是一个好主意。


一个更好的主意是将异常处理(或:预期意外处理代码)放在其中,这是您读取(可能不可靠的)外部源的方法。在此上下文中,外部源意味着:不受 Java 编译器控制。getCertNumbers


查看完整回答
反对 回复 2022-08-17
  • 2 回答
  • 0 关注
  • 172 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信