2017-01-25 6 views
0

Я создаю программное обеспечение, которое должно выполнять консольную команду. Команда зависит от конфигурации, которую вы настроили в реальном приложении.Почему это целое число возвращает 0, хотя это не 0?

Проблема в том, что одна из команд (всего 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" 

Но по какой-то странной причине, она возвращает 0 osIndex независимо от того, какой элемент в списке я выбираю .. И я понятия не имею, почему?

Если я использую этот код, он выдает правильное значение 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 + "]"); 
} 

EDIT: Кажется, что команда в массиве установлен и не меняется один раз изменить элемент в списке. Мне нужно, так или иначе, сделать это, когда я изменяю элемент списка; это тот момент, когда команда в массиве назначается переменной. Любые хорошие идеи о том, как это сделать?

EDIT 2: Решил, выполнив это; когда я нажимаю на кнопку «Go», он устанавливает текст команды в массиве на:

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

Там нет никакого способа, что это лучшее решение, но это было в значительной степени только один я мог себе выяснить. Если есть кто-нибудь с лучшей идеей, пожалуйста, дайте мне знать!

+1

Возможно 'e.getItem() 'не равно ни одной из строк, с которыми вы сравниваете это. – Eran

+0

Поскольку ни один из операторов if не был введен ... –

+0

Поскольку значение по умолчанию для поля равно '0', а ваш слушатель, вероятно, никогда не выполняется или никогда не достигает' osIndex = 3'. – rom1v

ответ

2

Ничего не "возвращено". Значение по умолчанию просто не переустанавливается.

Реальный тест. Используйте отладчик и установите некоторые точки останова. System.out является слоеным способом проверить что-то

Но поскольку ваши строки печати хорошо, это кажется вам необходимость создавать новую командную строку каждый раз при обновлении, что переменная osIndex

+0

На основе редактирования OPs операторы if (и сравнения) работают правильно , – Eran

+0

Неясно, откуда этот код вызывается, хотя –

+0

@Eran Я обновил исходное сообщение тем, что на самом деле проблема. Итак, теперь я знаю проблему (по крайней мере, какой-то прогресс), но не знаю, как ее обновить. –