2016-01-04 2 views
0

Я создаю графический интерфейс с некоторыми текстовыми полями и кнопкой отправки. Я пытаюсь проверить ввод, чтобы он не менял никаких значений, когда кнопка нажимается, если только значения не проверяют условие, но они сохраняют цикл независимо от значений, которые я им даю.Java endless Input Dialog loop

Сначала я хотел сделать это с помощью обычных диалогов сообщений, но я не могу изменить ввод, потому что окно в пути, и если я нажму OK, выполнение продолжит, так вот как я получил входные диалоги. Так что да, я действительно ценю помощь здесь :)

int landPrice = ((int) (Math.random() * (26 - 17)) + 17); 
int purchasedLand=0; 

while (!inputAccepted) { 
    purchasedLand = Integer.parseInt(landBox.getText().trim()); 
    if ((g.getGrain() - (purchasedLand * landPrice)) < 0) 
     purchasedLand = Integer.parseInt(JOptionPane.showInputDialog(landBox, 
        "please re-input the amount of purchased land," 
        + " we cannot afford the given amount! ")); 
    else { 
     System.out.println("yay"); 
     inputAccepted = true; 
    } 
} 

g.getGrain() должна возвращать 2800 на старте.

+0

После того, как вы в курсе, что нет никакой возможности для пользователя, чтобы обновить состояние поля (они фактически заблокированы) – MadProgrammer

+0

хорошо, так как иначе я мог обойтись без излишеств? – MuadDib

+0

Трудно узнать, потому что я не знаю, как ты попал в эту дыру. Рассмотрите возможность предоставления [runnable example] (https://stackoverflow.com/help/mcve), который демонстрирует вашу проблему. Это не дамп кода, а пример того, что вы делаете, что подчеркивает проблему, с которой вы сталкиваетесь. Это приведет к меньшему путанице и лучшим ответам – MadProgrammer

ответ

2

Ваша проблема исходит от этой линии:

purchasedLand = Integer.parseInt(landBox.getText().trim()); 

Хотя обновить переменную внутри JOptionPane, вы всегда установить его обратно в landBox.getText().trim(), так что вы никогда не достичь else заявление.

Окончательное решение

int landPrice = ((int) (Math.random() * (26 - 17)) + 17); 
int purchasedLand =Integer.parseInt(landBox.getText().trim()); 

while (!inputAccepted) { 

    if ((g.getGrain() - (purchasedLand * landPrice)) < 0) 
     purchasedLand = Integer.parseInt(JOptionPane.showInputDialog(landBox, 
        "please re-input the amount of purchased land," 
        + " we cannot afford the given amount! ")); 
    else { 
     System.out.println("yay"); 
     inputAccepted = true; 
    } 
} 
+0

спасибо! не могу поверить, что не заметил, что – MuadDib