2015-10-09 3 views
-2

У меня есть класс, который говорит ClassX с перечислением. как такОшибки при оценке ClassName.EnumName

public class ClassX{ 
    public enum XType { 
     E_1, E_2, E_3, E_TC, UN_KNOWN, N_ONE; 
    } 
} 

В методе (methodx) в другом классе я имею в виду перечисление назначаемый и его другой переменной следующим образом:

public class AnotherClass{ 
    public class NestedClass { 
     // some member variables 
     public NestedClass(String x, CustomClass y) { 
      this.m1 = x; 
      this.m2 = y; 
      this.b1 = false; 
      this.b2 = false; 
     } 
    } 

    public SomeType methodx() { 
     XType xt = null; 
     try { 
      // print log stmt1 
      xt = XType.E_TC; 
      // print log stmt2 
     } 
     catch(Exception e) { 
      // print log stmt3 
     } 
    } 
} 

Проблема заключается в том, что я получаю журнал stmt1 в журнале. Но не получайте ничего после этого метода methodx().

Я потратил часы, пытаясь понять, что случилось. Журналы не печатались, и не было никаких исключений, брошенных/пойманных. Затем я подключил отладчик. Поместите контрольные точки непосредственно перед назначением. Когда точка останова была удалена, я добавил XType.E_TC в список наблюдения. К моему удивлению, он сказал <Errors Evaluating>. Я по-прежнему продолжал свой шаг, и код прыгнул в блок конструктора блока подкласса над методом methodx()!

Это не имеет смысла для меня, поскольку классы правильно скомпилированы и классы загружаются правильно. Я проверил XType, выполнив «javap» отдельно, и нет ошибки.

Вы что-то видели раньше? Как это исправить? Почему такое происходит в первую очередь? Я имею в виду, я могу понять, если файл .class ClassX частично построен и не имеет определения для XType, это правдоподобно. Но определение класса и перечисление корректно компилируются в .class. как уже упоминалось выше, я проверил его с помощью команды javap.

Любая помощь и указатели очень ценятся!

+2

Поведение, которое вы описываете, чрезвычайно странно. Возможно, у вас есть один или несколько файлов устаревшего класса - вы можете исправить это, выполнив полную перестройку своего проекта. Однако, если вы хотите получить какую-либо конкретную помощь от нас, вам нужно будет опубликовать MCVE. –

+0

Джон, я уверен, если я сделаю вышеприведенный образец в компилируемое состояние, я НЕ ПОЛУЧАЮТ проблему, которую я опубликовал. Это будет очень простая функциональность Java, которая будет нарушена. Мне нужно знать возможные причины и любые указатели на инструменты или процессы, которые могут помочь мне изолировать проблему. Я считаю, что решение будет простым, как только будет выявлена ​​первопричина. –

+0

Пожалуйста, уточните в своем вопросе. Более конкретно. Сделайте свой вопрос короче, насколько это возможно. –

ответ

1

"It may be that you have one or more stale class files somewhere" действительно выглядит как наиболее вероятная причина: ваш код был скомпилирован, но был связан неправильно (возможно, с некоторыми остальными объектными файлами) во время выполнения.

Исследуйте состояние приложения при достижении точки останова более подробной информации: если загружено XType, из какого местоположения, как оно выглядит, если присутствуют другие объекты из этого модуля компиляции (добавьте один для теста и посмотрите, появляется ли он на во время выполнения). Кроме того, вы можете сделать чистую сборку в другом каталоге и искать различия в состоянии выполнения.

0

Проблема заключалась в том, что зависимый класс недоступен в classpath. Я бы ожидал ClassNotFoundException в таком случае. Но по причинам, известным для сервера JBoss EAP6, он печатал это на уровне «TRACE».

Когда я предоставил правильный файл jar на пути к классам, он не дал мне никаких ошибок.

Я все еще не могу смириться с тем, что, когда класс не найден, сервер JBoss EAP решил сообщить об этом в TRACE!

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