Java 这个JDK错误消息意味着什么?

Java 这个JDK错误消息意味着什么?,java,openjdk,Java,Openjdk,我不熟悉Java和JDK。我有一个java程序作为.jar文件,我想在ubuntu 12.04中运行它。我使用以下命令: java -jar SAStoSEP.jar 但我得到了这个错误信息: Exception in thread "main" java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.ref

我不熟悉
Java
JDK
。我有一个java程序作为
.jar
文件,我想在
ubuntu 12.04
中运行它。我使用以下命令:

java -jar SAStoSEP.jar
但我得到了这个错误信息:

Exception in thread "main" java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:616)
    at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
Caused by: java.lang.ArrayIndexOutOfBoundsException: 0
    at SAStoSeP.main(SAStoSeP.java:56)
    ... 5 more

这个错误意味着什么?

它意味着在SAStoSeP的第56行(在main方法中),抛出了ArrayIndexOutOfBoundsException


因为main方法是通过反射调用的,所以它被包装在InvocationTargetException中,这就是堆栈跟踪被分成两部分的原因。

jarrscloader.main
方法中,方法调用是使用nig refelction(jarrscloader.java:58)调用
SAStoSeP.main

调用该方法时抛出了一个错误(SAStoSeP.java:56)。此异常被包装在
调用targetException

从javadoc:

抛出InvocationTargetException-如果基础方法抛出异常


这个错误是不言自明的。在SastoSep.java的第56行检查您的代码

SAStoSeP
类的
main()
方法中,您试图访问空列表的第一个元素。因此,您将获得
ArrayIndexOutOfBoundsException
。它与JDK无关。可能的原因有:

  • 程序从命令行读取参数,而您不提供任何参数
  • 这不是您应该运行的
    main
    类。您正在启动一个可运行的JAR文件,但它可能包含许多
    main()
    方法

由于这是一个专有项目,我们无法告诉您是什么导致抛出特定异常。这需要查看源代码

解决此问题的正确方法是请产品支持人员解释问题并告诉您如何避免。首先,任何像这样向用户抛出一般异常的东西都可以说是一个bug。如果你为产品的使用权支付了费用,那么你对产品的可靠性有一个合理的期望。。。和支持


但是,给定引发异常的方法。。。而例外本身。。。我猜SAStoSeP需要一些命令行参数。(写得不好的
main(String[]args)
方法可能试图访问
arg[0]
,而不检查
args.length
。这将导致索引0处出现
ArrayIndexOutOfBounds
。并且您没有提供任何参数…)因此,请检查有关如何使用该命令的文档。

java.lang.ArrayIndexOutOfBoundsException
位于
SAStoSeP.java:56
?否。不幸的是,此程序是封闭源代码,您可能缺少一个参数。@HesamQodsi如果它是封闭源代码,为什么要在这里询问?我们无法猜测您的代码是什么,如果您需要帮助,您必须显示代码。加上Java是完全可反编译的,所以制作一个jar不会使你的程序成为封闭源代码。@BackSlash-1)我不认为他是在制作封闭源代码的程序。他正在用一个。2) 您可以(尝试)反编译Java程序的事实并不意味着没有封闭源代码的Java程序:a)反编译并不总是有效,b)反编译可能被许可证禁止,和c)它不能提供原始源代码。我如何处理这个问题?@Hesam Qodsi我猜反射调用使用了程序参数,而您忘了在命令行提供一个参数。你能发布SAStoSeP的源代码吗?因为他是使用
-jar
启动的,所以决定入口点的是jar本身(即MANIFEST.MF)。当然,它会选择一个有意义的。。。