2016-03-12 6 views
0

Мой цикл while в Java не работает, хотя логическое значение все еще ложно (я думаю?).Пока цикл не зацикливается на java

Если я удалю все «mysqlStatus = true« он по-прежнему не хочет контура. Я не понимаю, как это возможно, поскольку я никогда не переключаю логическое на «true».

Это, наверное, что-то глупое, хотя так спасибо заранее за помощь :).

Петля:

Connection conn; 
    Boolean mysqlStatus = false; 

    while(mysqlStatus.equals(false)) { 

     try { 
      Class.forName(driver).newInstance(); 
      conTest = DriverManager.getConnection(host + dbName, username, password); 
      mysqlStatus = true; 
     } catch (SQLException e) { 
      // server offline 

      Alert alert = new Alert(AlertType.CONFIRMATION); 
      alert.setTitle("Database offline"); 
      alert.setHeaderText("De MySQL database server is offline"); 
      alert.setContentText("Start de server en probeer opnieuw."); 

      ButtonType buttonTypeOne = new ButtonType("Opnieuw controleren"); 
      ButtonType buttonTypeCancel = new ButtonType("Exit", ButtonData.CANCEL_CLOSE); 

      alert.getButtonTypes().setAll(buttonTypeOne, buttonTypeCancel); 

      Optional<ButtonType> result = alert.showAndWait(); 
      if (result.get() == buttonTypeOne){ 
       mysqlStatus = false; 
       alert.close(); 
      } else { 
       System.exit(0); 
      } 
     } catch (Exception e) { 
      mysqlStatus = false; 
      ExceptionDialog cexD = new ExceptionDialog(); 
      cexD.setStrError("Er is een onverwachte fout opgetreden."); 
      cexD.setException(e); 
     } finally { 
      try { 
       conTest.close(); 
      } catch (SQLException e) { 
       mysqlStatus = false; 
       ExceptionDialog cexD = new ExceptionDialog(); 
       cexD.setStrError("Er is een onverwachte fout opgetreden."); 
       cexD.setException(e); 
      } 
     } 

    } 

ответ

3

Вы не делаете

mysqlStatus.equals(false) 

в Java. Не уверен, что это будет делать.

Вам нужно сделать

(!mysqlStatus) 

для проверки условий.

+1

Изменен и он все еще не работает. – Niell

+0

@Niell Откуда вы знаете, что это не петля? Не забывайте, что вы поставили свою переменную в true в рамках предложения try. –

+0

Вы проверили это? Это не нормально, но он все равно должен работать. – resueman

0

От here:

The java.lang.Boolean.equals (объект OBJ) возвращает true тогда и только тогда, когда аргумент не null и является Boolean объект, который представляет собой же логическое значение значение как этот объект.

Теперь false примитивный boolean буквальным (который является либо true или false и не Boolean объект Boolean объект может быть true, false или NULL.)

Итак, что происходит, когда вы делаете:

mysqlStatus.equals(false) 

Вы сравниваете Boolean объект mysqlStatus с boolean примитивного буквальный false (а не Boolean объект false значения), и поэтому он всегда возвращаются false (потому что mysqlStatus не то же самое Boolean объекта, как false), и в результате вы никогда не войти в петле while.

ли это сравнить, если mysqlStatus является false с Boolean объекта:

while(Boolean.FALSE.equals(mysqlStatus)) //also handle NULL 
0

Любое исключение, кроме SQLException как ClassNotFoundException будет пойманной по отклонениям и петли бесконечно. Там перерыв вызова или такой.

Boolean - это класс обертки объекта для примитивного типа boolean.

boolean mysqlStatusVastgesteld = false; 

while (!mysqlStatusVastgesteld) { 
0

Я исправил его, выполнив функцию, которая проверяет состояние.

public Boolean checkStatus() { 

     try { 
      Class.forName(driver).newInstance(); 
      Connection conTest = DriverManager.getConnection(host + dbName, username, password); 
      return true; 
     } catch (Exception e) { 
      // server offline 
      return false; 
     } 

    } 

Я также сделал цикл while, который запускает эту функцию, пока не вернет true. Если он вернет false, появится диалоговое окно и попросит повторить попытку или выйти.

Все работает сейчас. Это была странная проблема, но спасибо всем за помощь! В моем коде было много ошибок.

Смежные вопросы