2013-04-12 102 views
0

我試圖用一種方法來計算一個行程的時間,使用此:麻煩與組合框和計算

private void updateTripDurationText() 
{ 


    String speed = (String)avgspeedBox.getSelectedItem(); 
    String dist = (String)distanceText.getText(); 

    double s = Double.parseDouble(speed); 
    double d = Double.parseDouble(dist); 
    double durationTime = d/s; 
    String dTime = String.format("1%.1f", Double.toString(durationTime)); 
    durationText.setText(dTime); 

    } 

雖然我可以運行程序,我得到涉及空字符串錯誤。該prgram有3個組合框。在那裏你選擇你的A和B位置,然後它將提出距離。我想要第三個組合框(速度)來計算距離/速度的持續時間,然後把它放到文本框中。我哪裏錯了?

這是動作監聽:

private class ComboBoxListener implements ActionListener 
{ 


    public void actionPerformed(ActionEvent e) 
    { 

     setCities(destinationBox.getSelectedIndex(),originBox.getSelectedIndex()); 
    updateDistanceText(); 
     updateTripDurationText(); 

    } 

} 

這個分成不同的事件處理程序我有不正確的計算後一個問題。持續時間的計算返回非常大的值。

+0

一個涉及空字符串的錯誤?什麼是確切的錯誤? –

+0

線程中的xception「AWT-EventQueue-0」java.lang.NumberFormatException:空字符串 和java.security.AccessController.doPrivileged(本機方法) –

+0

由於字符串爲空而您正試圖轉換編號。 –

回答

3

嘗試

String.valueOf(Primitive/Object Reference) 

不是toString方法,以便它不會拋出在NULL值原始或對象結果的情況下,任何NullPointerException。而且對於ComboBoxListBox使用ItemListener並覆蓋其方法itemStateChanged()

+0

好的,那工作... sortof。儘管現在的GUI都是不可靠的,但每當我改變速度時都不會立即更新。什麼會造成這種情況? –

1

在使用Double.parseDouble解析它們之前,檢查speeddist是否爲空可能是一個好主意。但是如果有些人進入「20.2英里」進入遠距離盒子會怎麼樣?它不會是一個空字符串,但仍會拋出NumberFormatException。

if ((speed.length() > 0) && (dist.length() > 0)) { 
    String speed = (String)avgspeedBox.getSelectedItem(); 
    // rest of your code... 
} 

嘗試捕捉異常,如果被捕獲,讓用戶知道他們的輸入是錯誤的。

try { 
    if ((speed.length() > 0) && (dist.length() > 0)) { 
     String speed = (String)avgspeedBox.getSelectedItem(); 
     // rest of your code... 
    } 
} catch (NumberFormatException nfe) { 
    // show some kind of warning message 
} 
+0

它們是組合框,文本框只是放置結果並且是隻讀的。程序中沒有直接的用戶輸入 –