2014-02-20 40 views
-1

我正在製作一個數據採集軟件,使用Sparrow's Kmax。我在我的Ubuntu 12.04筆記本電腦上編寫代碼。我創建的方法之一是以下Java中的異常錯誤從Ubuntu 12.04移到10.04時

public double getValueFrom(String widgName) {//Read data from user input text fields 
    KmaxWidget widg = tlsh.getKmaxWidget(widgName); 
    String str = widg.getProperty("TEXT"); 

    double num = 0; 
    try { 
     num = Double.parseDouble(str); 
    } 
    catch (Exception e) { 
     tlsh.setProperty("STATUSSTR", "Attention! Channel and Energy must be double precision number. i.e. 10, 3.14 etc."); 
     tlsh.showWarning("Choose a double precision number."); 
     throw e; 
    } 
    return num; 
} // getValueFrom 

當我在我的筆記本電腦上編譯代碼它沒有任何錯誤。當我將代碼複製到了Ubuntu 10.04桌面我得到一個異常代碼

unreported exception java.lang Exception: must be caught or declared to be thrown 
throw e; 
^ 

掠過我腦海的是,他們有不同的版本的Java的第一件事。事實上,這是真的,所以我更新了10.04的Java,但同樣的錯誤發生。任何想法可能是錯誤的?

編輯我還添加了throws Exception方法的參數之後,但每當這個方法被稱爲我的錯誤(這兩個系統上)

unreported exception Exception; must be caught or declared to be thrown 
+0

該代碼是不是在任何* *的Java版本有效。我對你的筆記本上編譯的聲明深表懷疑。你只是*不能從不聲明它的方法拋出java.lang.Exception。 –

+0

您無法在任何Java版本中進行編譯。 –

+0

@JonSkeet:我如何證明上述代碼在筆記本電腦上編譯?在箱子下面的「通道」中,我輸入「p」以使警告框彈出。 http://imgur.com/vDMUQfG – Thanos

回答

3

問題是因爲即將到來:

throw e; 

由於您從catch塊中拋出一個java.lang.Exception對象,因此您的方法簽名必須包含throws子句,說明這一點,因此您的方法簽名現在變爲(否則您的編譯器將compl ain):

public double getValueFrom(String widgName) throws Exception 

此更改將解決問題。

+0

非常感謝您的回答!當我添加'拋出異常'我得到錯誤'未報告的異常異常;每當我的方法被調用時,都必須被捕獲或聲明爲被拋出...... – Thanos

+0

多數民衆贊成那該怎麼做,因爲這是一個檢查異常。在調用getValueFrom時,您必須捕獲或重新拋出異常。 – aryann

+0

我該怎麼做? – Thanos

2

由於異常說,這個功能它應該通過例外父類,所以你通過exeption定義功能,像下面

public double getValueFrom(String widgName) throws Exception 
{ 
// body 
} 
+0

非常感謝您的回答!當我添加'拋出異常'我得到錯誤'未報告的異常異常;每當我的方法被調用時,都必須被捕獲或聲明爲拋出...... – Thanos

+0

您需要處理父類中的異常或像上面那樣拋出異常 –