2013-10-20 64 views
0

我不熟悉JavaJDK。我有一個java程序作爲.jar文件,我想運行它在ubuntu 12.04。我使用這個命令:這個JDK錯誤信息是什麼意思?

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 

這個錯誤是什麼意思嗎?

+2

'SAStoSeP.java:56'上的'java.lang.ArrayIndexOutOfBoundsException'? – BackSlash

+0

不幸的是,這個程序是關閉源 –

+1

您可能錯過了一個論點。 –

回答

0

這意味着SAStoSeP的第56行(在主要方法中)拋出了ArrayIndexOutOfBoundsException異常。

因爲主要方法是通過反射調用的,所以它被包裝在一個InvocationTargetException中,這就是爲什麼堆棧跟蹤被分成兩部分的原因。

1

JarRsrcLoader.main方法中,使用refinction(JarRsrcLoader.java:58)完成方法調用以調用SAStoSeP.main

在調用該方法時拋出了一個ArrayIndexOutOfBoundsException(SAStoSeP.java:56)。這個例外被包裝在InvocationTargetException中。

Method的Javadoc:

拋出的InvocationTargetException - 如果底層方法拋出異常。

+0

我該如何處理這個問題? –

+0

@Hesam Qodsi我猜想反射調用使用了程序參數,並且你忘記了在命令行提供一個參數。你能發佈SAStoSeP的源代碼嗎? –

1

檢查在第56行代碼在你SAStoSePmain()方法,您試圖訪問一個空列表的第一個元素。因此,你得到ArrayIndexOutOfBoundsException。它與JDK無關。可能的原因有:

  • 該程序從命令行讀取參數,並且不提供任何參數。
  • 這不是您應該運行的main類。您正在啓動一個可運行的 JAR文件,但它可能包含許多main()方法。
+0

由於他正在使用'-jar'啓動,因此決定入口點的是JAR本身(即MANIFEST.MF)。當然,它會選擇一個合理的... –

0

由於這是一個專有的項目,我們不能告訴你是什麼導致了一個特定的異常被拋出。這將需要看源代碼!

解決此問題的正確方法是要求支持人員爲產品解釋問題並告訴您如何避免此問題。首先,像這樣向用戶拋出一個通用異常的東西可以說是一個錯誤。如果您爲使用產品的權利付款,您對可靠性和支持有合理的期望。

但是,鑑於引發異常的方法......以及異常本身......我猜測是SAStoSeP需要一些命令行參數。 (寫得不好的main(String[] args)方法可能會嘗試訪問arg[0]而不檢查args.length。這將導致索引爲0的ArrayIndexOutOfBounds。並且您沒有提供任何參數...)因此,請查看關於如何對該命令的文檔。