为什么这个整数会返回0,尽管它不是0?

时间:2017-01-25 08:35:03

标签: java swing variables integer

我正在创建一个应该执行控制台命令的软件。该命令因您在实际应用程序中设置的配置而异。

问题是,其中一个命令(总共4个)需要捕获一个整数才能进行配置。

整数由下拉列表通过以下代码设置:

private String[] osList = {"Choose OS", "Windows 7 Pro", "Windows 7 Home Basic", "Windows 7 Home Premium", "Windows 7 Ultimate"};
private JComboBox osDropDown = new JComboBox(osList);
public int osIndex;

osDropDown.addItemListener(new ItemListener() {
            public void itemStateChanged(ItemEvent e) {
                if(e.getStateChange() == ItemEvent.SELECTED) {
                    Object item = e.getItem();

                    if(item.equals(osList[1])) {
                        osIndex = 3;
                    } else if(item.equals(osList[2])) {
                        osIndex = 1;
                    } else if(item.equals(osList[3])) {
                        osIndex = 2;
                    } else if(item.equals(osList[4])) {
                        osIndex = 4;
                    }
                }
            }
        });

正如您所看到的,变量osIndex应该设置为3,例如,如果您选择" Windows 7 pro"。
这是执行的命令:

"dism /mount-wim /wimfile:install.wim /index:" + formPanel.osIndex + " /mountdir:mount"

但是出于一些奇怪的原因,无论我选择的列表中的哪个项目,它都会在osIndex上返回0 ..我不明白为什么?

如果我使用此代码,当我在列表中选择时,它会输出正确的osIndex值。但是当我在选择后尝试运行命令时,它仍然返回0.

if(item.equals(osList[1])) {
    osIndex = 3;
    System.out.println(osList[1] + " [" + osIndex + "]");
} else if(item.equals(osList[2])) {
    osIndex = 1;
    System.out.println(osList[2] + " [" + osIndex + "]");
} else if(item.equals(osList[3])) {
    osIndex = 2;
    System.out.println(osList[3] + " [" + osIndex + "]");
} else if(item.equals(osList[4])) {
    osIndex = 4;
    System.out.println(osList[4] + " [" + osIndex + "]");
}

编辑:一旦我更改了列表中的项目,似乎设置了数组中的命令并且没有更改。当我改变列表项时,我需要以某种方式实现它;这是数组中的命令分配给变量的点。关于如何做到这一点的任何好主意?

编辑2:通过这样解决它;一旦我点击了" Go"按钮,它将数组中的命令文本设置为:

cmdExec.cmd[3] = "dism /mount-wim /wimfile:install.wim /index:" + formPanel.getOsIndex() + " /mountdir:mount";

这不是最佳解决方案,但它几乎是我目前唯一可以解决的问题。如果有任何人有更好的想法,请告诉我!

1 个答案:

答案 0 :(得分:2)

没有"返回"。默认值不会被重新分配。

真实测试 - 使用调试器并设置一些断点。 System.out是一种测试内容的片状方法

但是因为你的字符串打印正常,所以每次更新osIndex变量时你似乎需要创建一个新的命令字符串