2014-01-15 2 views
0

Я запускаю приложение GWT с использованием GWT 2.5.1 и Ext GWT v2.2.4 на Eclipse Juno. Java 6 (32 бит), и я не могу ничего изменить.Приложение GWT зависает из-за внутреннего бесконечного цикла

Я был недавно передан это приложение, которое отлично работает на другой машине. После запуска приложения (Запустить> Приложение GWT), я продолжу вход в мое приложение, мой код выполняется нормально, но затем мое приложение замерзает. Я отлажена и обнаружил, что приложения входит в бесконечный цикл в этом внутреннем методе GWT (т.е. в классе com.google.gwt.dev.shell.BrowserChannelServer):

public void reactToMessages(SessionHandlerServer handler) { 
    do { 
     try { 
     getStreamToOtherSide().flush(); 
     MessageType messageType = Message.readMessageType(
      getStreamFromOtherSide()); 
     switch (messageType) { 
      case FREE_VALUE: 
      final FreeMessage freeMsg = FreeMessage.receive(this); 
      handler.freeValue(this, freeMsg.getIds()); 
      break; 
      case INVOKE: //<<<< Keeps getting into this block 
      InvokeOnServerMessage imsg = InvokeOnServerMessage.receive(this); 
      ExceptionOrReturnValue result = handler.invoke(this, imsg.getThis(), 
       imsg.getMethodDispatchId(), imsg.getArgs()); 
      sendFreedValues(); 
      ReturnMessage.send(this, result); 
      break; 
      case INVOKE_SPECIAL: 
      handleInvokeSpecial(handler); 
      break; 
      case QUIT: 
      return; 
      default: 
      throw new RemoteDeathError(new BrowserChannelException(
       "Invalid message type " + messageType)); 
     } 
     } catch (IOException e) { 
     throw new RemoteDeathError(e); 
     } catch (BrowserChannelException e) { 
     throw new RemoteDeathError(e); 
     } 
    } while (true); 
} 

messageType всегда ВЫЗОВ и так как условие в то время как это верно, цикл никогда не заканчивается , Таким образом, выполнение застрял в этом стеке:

Daemon Thread [Code server for av.mymodule from Mozilla/5.0 (Windows NT 6.1; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0 on http://127.0.0.1:8889/mymodule.html?gwt.codesvr=127.0.0.1:9997 @ tsb2t8vtLUT/vrj#] (Suspended) 
      BrowserChannelServer.reactToMessages(BrowserChannelServer$SessionHandlerServer) line: 292  
      BrowserChannelServer.processConnection() line: 547 
      BrowserChannelServer.run() line: 364 
      Thread.run() line: 662 

Я очистил проект, удаленные файлы кэша, временные файлы, перекомпилировать несколько раз, пытался старую версию 2.4.0, но я не могу попробовать 2.6, потому что я буду нужна java 7, которую я не могу установить на данный момент. Я пробовал хром и firefox, те же результаты. После некоторого поиска я нашел несколько предложений, которые я не должен увеличивать с помощью браузера, но я этого не делаю.

В чем проблема?

ответ

0

Я думаю, что ваш в то время как условие должно быть динамической переменной вместо true. Вы должны вырваться из do while loop. Если нет, ваше исполнение может стекаться.

public class TestDoWhile { 
private static TestDoWhile test; 

public static void main(final String[] args) { 
    test = new TestDoWhile(); 
    test.invokeMethod(2); 
    test.invokeMethod(1); 
} 
public final void invokeMethod(final int testCase) { 
    do { 
     switch (testCase) { 
     case 1: 
      System.out.println("Invoke"); 
      break; 
     case 2: 
      System.out.println("Please , let me quit !"); 
      return; 
     default: 
      return; 
     } 
    } while (true); 
} 
} 

Что является результатом моей программы java? Это может складываться. И я не могу представить ваши эти два метода sendFreedValues ​​(); ReturnMessage.send (это результат);

Итак, Добавить возвращение вместо разрыва. Принесите что-нибудь полезное для вас.

+0

Как я уже упоминал, это внутренний код GWT. Я не могу его изменить. Если это неправильно, то что-то очень не так. Это может быть ошибка GWT, в которой я очень сомневаюсь, но даже тогда только команда GWT может ее решить, потому что я ничего не знаю о внутренних компонентах GWT. –

+0

@MuhammadGelbana Прошу прощения за это! Если это так, вы должны скопировать исходные коды и создать собственный виджет или класс, а затем, пожалуйста, проверьте его снова. Иногда GWT дает мне некоторые недостатки и все еще некоторые слабые стороны. Я понятия не имею о GWT 2.6. – Cataclysm

1

Проблема заключалась в том, что Ext GWT 2.2.4 не совместим с GWT 2.5.1, но он совместим с GWT 2.5.0

Таким образом, используя GWT 2.5.0 вместо этого, решить эту проблему.

+0

Да, спасибо за полезные знания. Я использую GWT 2.5.1. (версия .1) была поражена вам :) – Cataclysm

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