2012-04-16 127 views
2

我有一系列的四個是/四個獨立的對話框無從選擇,累計結果這將導致十二個獨立的環節之一(例如,是/是/是/否 - >鏈接A,是/否/否/是 - >鏈接B等)。分支邏輯使用布爾值。使用布爾真/假與JOptionPane.YES_NO_OPTION

這裏是我迄今爲止...只是第一個對話框,並列印驗證結果。

public class OutageGuideSelector{ 
    public static void main(String[] args){ 
     boolean contactServerUp; 
     boolean vistaUp; 
     boolean stormOutage; 
     boolean vistaCSUp; 
// 
     int contactServerEntry = JOptionPane.showConfirmDialog(null, 
           "Is the contact server up", "Please select", 
           JOptionPane.YES_NO_OPTION); 
     System.out.println("result from entry " + contactServerEntry); 
     if(contactServerEntry==1) 
      contactServerUp = true; 
     else 
      if(contactServerEntry==0) 
      contactServerUp = false; 
     /* System.out.println(contactServerUp); */ 
     }} 

眼下,返回點擊一個0是reults的結果,沒有結果的1。這是正常的,似乎是違反直覺的,並沒有什麼在docs.oracle.java,顯示除了this的輸出值的一個明顯的例子,這似乎表明,public static final int YES_NO_OPTION默認0

此外,該行System.out.println(contactServerUp);回來了一個錯誤,說明當我對它進行取消註釋時,字段contactServerUp might not have been initialized,所以我看不到我的convert-int-to-boolean是否正在工作。

第一:看起來,JOptionPane方法不包括任何布爾返回...除了getWantsInput(),它返回wantsInput屬性的值...所以我假設我已經是最有效率,我可以用這個。我想知道是否有更簡單的方法。

其次,我失去了什麼,可防止識別contactServerUp我的控制檯輸出語句?我的錯位分號在哪裏?

回答

3

根據該javadoc,當所述showXxxDialog方法之一返回一個整數,可能的值包括:

  • YES_OPTION
  • NO_OPTION
  • CANCEL_OPTION
  • OK_OPTION
  • CLOSED_OPTION

您應該測試對那些常數:

contactServerUp = (contactServerEntry == JOptionPane.YES_OPTION); 
2

由所述的JOptionPane對話框返回的值是值定義爲在類常數字段。

雖然,的確,人們可以假設0表示假,1表示真,值是不同的按鈕一個對話框,可以有更多的IDS。

要知道用戶是否按下了yes或no,您可以將返回值與here中描述的常量字段進行比較。例如,在你的情況:

contactServerUp = (contactServerEntry == JOptionPane.YES_OPTION); 
1

由於對話框中的JOptionPane可以有兩個以上的可能的「答案」一個布爾值將是一個糟糕的表現。你忘了YES,NO和CANCEL選項,或者只是一個OK的答案。

如果它今天寫了,我懷疑一個枚舉會被用來代替int。

1

至於第二個問題,編譯器不允許訪問未初始化的變量。 當你這樣做時,有機會的話,變量可能未初始化:

if(contactServerEntry==1) 
     contactServerUp = true; 
    else 
     if(contactServerEntry==0) 
     contactServerUp = false; 

如果什麼,例如,contactServerEntry == JOptionPane.CLOSED_OPTION?在這種情況下,你的布爾值永遠不會被初始化。 您需要在if-else鏈的末尾添加else子句,或者在開始時將contactServerUp值初始化爲默認值。