2012-04-16 130 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值初始化为默认值。