我如何解决在一台计算机上工作但不能在另一台计算机上使用的ArrayIndexOutOfBoundSexception



,所以我对如何解决这个问题感到不知所措。

我将Eclipse用作我的IDE,并通过它导出一个可运行的罐子。一切都在工作之前使用,除了我有一个ComboBox并用数组(FX.Collections-thing)加载它。我在我的Windows 7计算机上运行它,然后将其移至Windows 10计算机上,以确保一切顺利,但在这种情况下不是。

outofboundSexception通常很容易处理,但是我对如何处理此例外感到不知所措,因为它在一台计算机上起作用(没有运行时例外),另一方面是此例外(s):

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文件中读取的双重类型。我尝试从"one_answers"和"更改阵列列表的类型"。我已经更改了加载的代码的位置。它总是转到此部分:

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

我一直认为这还可以,但是更好的方法是什么?还是我只是不幸?而且我也在MAIM中启动(ARGS)方法之前的ArrayList。>

和所有库以前都在工作,但是添加了此组合曲线和阵列列表(而不是fx.collections-thing)会破坏它。

我真的很笨。

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编译器控制。

归功于JB Nizet,以帮助我完成这一工作。

我已经检查了该文件是否不存在,将使用适当的模板创建一个新文件作为冗余。但!这并不意味着模板中有任何值以加载阵列列表。

它在我的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.
}

我感到很愚蠢。感谢大家。很抱歉浪费您的时间。

相关内容

  • 没有找到相关文章

最新更新