繁体   English   中英

对JOptionPane使用布尔值True / False.YES_NO_OPTION

[英]Using Boolean True/False with JOptionPane.YES_NO_OPTION

我在四个单独的对话框中有一系列四个是/否选择,其累积结果将导致十二个单独的链接之一(例如,是/是/是/否->链接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中没有任何东西可以显示输出值的清晰示例,除了似乎表明public static final int YES_NO_OPTION缺省为0。

此外,该行System.out.println(contactServerUp); 会返回一个错误,当我取消注释该字段时, contactServerUp might not have been initialized字段contactServerUp might not have been initialized ,因此我看不到convert-int-to-boolean是否正常工作。

首先:看来JOptionPane方法不包含任何布尔返回值……除了getWantsInput()返回了wantInput属性的值之外……所以我认为我已经是使用此方法效率最高的方法了。 我想知道是否有更简单的方法。

其次,我缺少什么阻止我的控制台输出语句识别contactServerUp 我放错位置的分号在哪里?

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

  • YES_OPTION
  • NO_OPTION
  • CANCEL_OPTION
  • OK_OPTION
  • CLOSED_OPTION

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

contactServerUp = (contactServerEntry == JOptionPane.YES_OPTION);

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

尽管确实可以假定0表示false,1表示true,但是对于对话框可以具有的不同按钮,值更多。

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

contactServerUp = (contactServerEntry == JOptionPane.YES_OPTION);

由于对话框,JOptionPane可以具有两个以上的“答案”,因此布尔值将表示不佳。 您忘记了“是”,“否”和“取消”选项,或者只是一个好的答案。

如果今天写的话,我怀疑应该用Enum代替int。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM