猿问

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

所以我不知道如何去做这个。


我使用Eclipse作为我的IDE,并通过它导出一个可运行的jar。以前一切都工作正常,除了现在我有一个ComboBox并用数组(FX.收藏品)。我在Windows 7计算机上运行它,在那里我进行开发,然后我将其移动到我的Windows 10计算机上,在那里我进行测试以确保一切正常,但在这种情况下不是这样。


OutOfBoundsException通常很容易处理,但我不知道如何处理此异常,因为它在一台计算机上工作(没有运行时异常),而在另一台计算机中则有此异常:


Exception in Application start method

java.lang.reflect.InvocationTargetException

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 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 method

at 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 放入它自己的对象中。

牧羊人nacy
浏览 173回答 2
2回答

jeck猫

我检查了如果文件不存在,将使用适当的模板创建一个新文件作为冗余。但!这并不意味着模板中有任何值来加载 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.}我觉得自己太笨了。谢谢大家。我很抱歉浪费你的时间。

狐的传说

ArrayList.get如果索引超出范围,则抛出。在您的情况下,可能小于零。IndexOutOfBoundsException要避免这种情况,请在代码中添加检查:ArrayList<Integer> certNumbersFound = workbook.getCertNumbers();if (certNumbersFound.size() >= 1) {&nbsp; &nbsp; int lastNumber = certNumbersFound.get(certNumbersFound.size()-1);&nbsp; &nbsp; //more code}else {&nbsp; &nbsp; //handle situation according to your needs&nbsp; &nbsp; //e.g. throw exception, log something or write to err:&nbsp;&nbsp; &nbsp; System.err.println("Invalid size: " + certNumbersFound.size());}从外部源(在本例中为 Excel 文件)读取数据时,引入安全检查始终是一个好主意。一个更好的主意是将异常处理(或:预期意外处理代码)放在其中,这是您读取(可能不可靠的)外部源的方法。在此上下文中,外部源意味着:不受 Java 编译器控制。getCertNumbers
随时随地看视频慕课网APP

相关分类

Java
我要回答