在JOptionPane.YES_NO_OPTION中使用布尔值True / False

时间:2012-04-16 15:13:11

标签: java boolean joptionpane

我在四个单独的对话框中有一系列四个是/否选项,其累积结果将导致十二个单独链接中的一个(例如,是/是/是/否 - >链接A,是/否/否/是 - >链接B等)。分支逻辑使用布尔值。

这是我到目前为止的内容......只是第一个对话框并打印结果进行验证。

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); */
       }}

现在,点击YES的结果会在返回0时结果,否则会产生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?哪里是我错位的分号?

4 个答案:

答案 0 :(得分:3)

根据javadoc,当其中一个showXxxDialog方法返回一个整数时,可能的值为:

  • YES_OPTION
  • NO_OPTION
  • CANCEL_OPTION
  • OK_OPTION
  • CLOSED_OPTION

您应该对这些常量进行测试:

contactServerUp = (contactServerEntry == JOptionPane.YES_OPTION);

答案 1 :(得分:2)

JOptionPane对话框返回的值是在类中定义为常量字段的值。

虽然实际上可以假设0表示false而1表示true,但值对于对话框可以具有的不同按钮的值更多。

要知道用户是否按了是,您可以将返回值与描述为here的常量字段进行比较。例如,在您的情况下:

contactServerUp = (contactServerEntry == JOptionPane.YES_OPTION);

答案 2 :(得分:1)

由于一个对话框,一个JOptionPane可以有两个以上可能的“答案”,一个布尔值将是一个糟糕的表示。你忘记了YES,NO和CANCEL选项,或者只是一个OK答案。

如果它今天已经写好了,我怀疑会使用Enum而不是int。

答案 3 :(得分:1)

至于第二个问题,编译器不允许访问未初始化的变量。 执行以下操作时,可能无法初始化变量:

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

例如contactServerEntry == JOptionPane.CLOSED_OPTION怎么办?在这种情况下,您的布尔值永远不会被初始化。 您需要在if-else链的末尾添加else子句,或者在开头将contactServerUp值初始化为默认值。

相关问题