gpt4 book ai didi

java - 如何解决在一台计算机上有效但在另一台计算机上无效的 ArrayIndexOutOfBoundsException?

转载 作者:行者123 更新时间:2023-12-02 01:36:25 26 4
gpt4 key购买 nike

所以我不知道如何解决这个问题。

我使用 Eclipse 作为我的 IDE,并通过它导出一个可运行的 jar。之前一切都正常,除了现在我有一个 ComboBox 并使用数组(FX.Collections-thing)加载它。我在 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)
Caused by: java.lang.ArrayIndexOutOfBoundsException: -1
at java.util.ArrayList.elementData(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at com.sun.javafx.collections.ObservableListWrapper.get(ObservableListWrapper.java:89)
at my.pages.giftcertmaker.MainGiftCertPage.start(MainGiftCertPage.java:52)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$166(LauncherImpl.java:863)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$179(PlatformImpl.java:326)
at com.sun.javafx.application.PlatformImpl.lambda$null$177(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$178(PlatformImpl.java:294)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$152(WinApplication.java:177)
... 1 more
Exception running application my.pages.giftcertmaker.MainGiftCertPage

编辑:请原谅我没有尽职调查,下面是第 51 行和第 52 行

ArrayList<Integer> certNumbersFound = workbook.getCertNumbers();
int lastNumber = certNumbersFound.get(certNumbersFound.size()-1);

这就引出了 getCertNumbers() 中的内容的问题

public ArrayList<Integer> getCertNumbers()
{
ArrayList<Integer> numbersUsed = new ArrayList<Integer>();
/*
* Code reads from an excel file column of doubles and converts
* the doubles to ints and adds them to numbersUsed with a for-loop
*/
return numbersUsed;

我尝试了 4 个不同的 Java 版本(1.8.0_181、_192、_201、_202)。我尝试在代码的不同部分更改从 Excel 文件读取的 double 类型。我尝试将 ArrayList 的类型从 、 和 更改为。我已经更改了加载代码的位置。它总是转到这部分:

certNumbersFound.get(certNumbersFound.size()-1)

我一直认为这样可以,但是有什么更好的方法呢?还是我只是运气不好?我还在 main 中的 launch(args) 方法之前对 ArrayList 进行了 System.out.println 编辑,并在放入 ArrayList 的 get 方法之前将 certNumbersFound.size()-1 放入它自己的对象中。

所有的库以前都可以工作,但是添加这个 ComboBox 和 ArrayList(而不是 FX.Collections 之类的东西)会破坏它。

我真的傻眼了。

最佳答案

如果索引超出范围,

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 文件)读取数据时,引入安全检查始终是个好主意。

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

关于java - 如何解决在一台计算机上有效但在另一台计算机上无效的 ArrayIndexOutOfBoundsException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55208841/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com