2

我在四个单独的对话框中有一系列四个是/否选项,其累积结果将导致十二个单独的链接之一(例如,是/是/是/否 -> 链接 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是返回 a , NO 的结果是 a 1。这是正常的吗,似乎违反直觉,并且在 docs.oracle.java 中没有任何内容显示输出值的清晰示例,除了似乎表明public static final int YES_NO_OPTION默认值为 0。

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

第一:看起来 JOptionPane 方法不包括任何布尔返回...除了getWantsInput()返回 wantInput 属性的值...所以我假设我已经是最有效的了。我想知道是否有更简单的方法。

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

4

4 回答 4

3

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

  • YES_OPTION
  • NO_OPTION
  • CANCEL_OPTION
  • OK_OPTION
  • CLOSED_OPTION

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

contactServerUp = (contactServerEntry == JOptionPane.YES_OPTION);
于 2012-04-16T15:19:02.610 回答
2

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

尽管确实可以假设 0 表示假而 1 表示真,但是对于对话框可以具有的不同按钮,这些值是更多的 id。

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

contactServerUp = (contactServerEntry == JOptionPane.YES_OPTION);
于 2012-04-16T15:18:51.537 回答
1

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

如果它是今天写的,我怀疑会使用 Enum 而不是 int。

于 2012-04-16T15:21:31.313 回答
1

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

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

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

于 2012-04-16T15:29:41.140 回答