я мог бы быть неправильно, о которых линия является причиной проблемы, но ошибка меняется каждый раз, я изменить это, если() заявление:Почему мое приложение Java убивается?
try {
while(true) {
String LRU = hashOperation();
System.out.println("In worker thread, this should be valid JSON: " + LRU);
if (jsonValidator.isStringValidJSON(LRU) && !LRU.isEmpty()) {
HashMap<String,String> messageMap = jsonGenerator.readJSON(LRU);
Так я предполагаю, что проблема с этим, если() заявление. Если я пишу это так:
if (jsonValidator.isStringValidJSON(LRU)) {
Затем приложение запускается и я получаю это исключение:
In worker thread, this should be valid JSON:
Exception in worker thread in Main::main: No content to map to Object due to end of input
, но если я пишу это так:
if (jsonValidator.isStringValidJSON(LRU) && !LRU.isEmpty()) {
Затем приложение запускается, но затем почти мгновенно умирает:
/usr/bin/java -cp /home/jenkins/run-nlp/SSAM.jar com.sofar.SSAM.Main
Starting NLP app 2015/08/30 21:42:28
Loading classifier from dependencies/english.all.7class.distsim.crf.ser.gz ... Killed
Основная идея здесь заключается в том, что приложение запускается, а затем закручивает некоторые фоновые потоки, которые бесконечно опросу на Redis, ища вход (вход поступает из другого приложения, которое публикует данные на канал в Redis).
Когда я вижу «Убитые» Я полагаю, что Exception пошел неперехваченное, но я всю эту тему :: Run(), завернутый в Try/улова, которая заканчивается:
} catch (Exception e) {
System.out.println("Exception in worker thread in Main::main: " + e.getMessage());
}
Вы можете увидеть, что это сообщение Exception, что я получу, если я это сделать:
if (jsonValidator.isStringValidJSON(LRU)) {
Хотя возможно ошибка в другом месте, и я думаю, что это странно, что пустая строка будет действительным JSON, я думал, что отсеивать эта возможность с:
if (jsonValidator.isStringValidJSON(LRU) && !LRU.isEmpty()) {
Почему это одно изменение заставляет мое приложение быть убитым?
UPDATE:
Я реструктурировать приложение к этому:
static void processMessage(ssamBrain ssamBrain, Jedis jedis, HashMap<String, String> responseMap, JsonGenerator jsonGenerator, JSONValidator jsonValidator, String LRU) {
try {
if (!LRU.isEmpty()) {
HashMap<String,String> messageMap = jsonGenerator.readJSON(LRU);
Transformer transformer = new Transformer();
Опять же, линия, которая вызывает проблемы, кажется:
if (!LRU.isEmpty()) {
Если у меня нет, что if(), то код получает:
java.io.EOFException: No content to map to Object due to end of input
на следующей строке, так как пустая строка недействительна JSON.
Но когда я добавить:
if (!LRU.isEmpty()) {
Затем мое приложение умирает при запуске.
Возможно автобоксирование является проблемой? Или его отсутствие? Предположим на данный момент:
LRU = "";
Я предполагаю, что могу называть методы на нем, но, возможно, нет? И почему бы мне не получить исключение?
Возможно, проблема в другом месте, но если утверждение() кажется основным, это вызывает проблему.
UPDATE
UPDATE
приложение иногда выживает в течение нескольких минут, но иногда он умирает через несколько секунд. Поэтому, я думаю, мне нужно спросить:
1.) когда приложение Java говорит «Убито» в терминале, всегда ли это означает, что Исключение сменилось?
2.) что может вызвать такое поведение переменных?
Вместо того, чтобы печатать 'e.getMessage()', используйте просто 'e.printStackTrace();' - это даст вам больше информации для работы. –
Это может быть полезно http://stackoverflow.com/questions/19775704/rest-post-controller-saying-could-not-read-json-no-content-to-map-due-to-end-o –
Luis Сиейра, я был бы счастлив, если бы смог получить Исключение. Прямо сейчас я просто получаю «Killed» после запуска приложения. – lars