mokystr
|
|
1 | |
JAVA консоль мешает ?11.05.2017, 05:30. Показов 3953. Ответов 6
Метки нет (Все метки)
У меня интересный вопрос. ?
Написал java-агента, который выполняет HTTP запрос на сайт (не важно на какой). Так вот, агент отказался в консоль выводить ответ с сервера - с криком .SpoilerTarget">Спойлер: ошибка java.lang.NullPointerException at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:727) at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:654) at COM.ibm.JEmpower.applet.http.HttpURLConnection.getInputStream(HttpURLConnection. java:411) at COM.ibm.JEmpower.applet.http.HttpURLConnection.getHeaderField(HttpURLConnection. java:703) at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:399) at JavaAgent.NotesMain(Unknown Source) at lotus.domino.AgentBase.runNotes(Unknown Source) at lotus.domino.NotesThread.run(Unknown Source) Я естественно взял бубен и стал в него ритмично бить... И ответ пришёл в виде: "Перезапусти Lotus Notes - запусти агента - открой консоль и увидишь там то что агент отработал правильно! Повторный запуск агента - работает!" Всё супер, раз всё работает - я решительно запускаю второго агента (точно такого же, это для теста делал) опять в консоль крик об ошибке - NullPointerException её мать!!! Перезагружаю Lotus, по порядку запускаю всех агентов, открываю консоль - и всё работает... Странно, подумал я, и вот прошу помощи у Вас. Что с этим делать? Как исправить работу агента, чтобы его консоль не "убивала"? Я так понял, что консоль каким-то образом влияет на работу агентов (пока встретил такое только при HTTP запросах). На всякий случай код агента - кому интересно попробуйте у себя. P.S. .SpoilerTarget">Спойлер: ТТХ IBM Notes 9 Social Edition Release 9.0.1 Revision 20131022.1138 (Release 9.0.1) Standard Configuration Server build number: Release 9.0.1FP2 База старенькая, с шаблона делал: File format: R85 (51:0) ODS version: 51 соответственно )) .SpoilerTarget">Спойлер: Код (Java): import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import lotus.domino.*; public class JavaAgent extends AgentBase { public void NotesMain() { String query = "https://ya.ru"; // например HttpURLConnection connection = null; try { Session session = getSession(); AgentContext agentContext = session.getAgentContext(); // (Your code goes here) connection = (HttpURLConnection) new URL(query).openConnection(); connection.setRequestMethod("GET"); connection.setUseCaches(false); connection.setConnectTimeout(250); connection.setReadTimeout(250); connection.connect(); StringBuilder sb = new StringBuilder(); System.out.println(connection.getResponseCode()); if (HttpURLConnection.HTTP_OK == connection.getResponseCode()) { BufferedReader in = new BufferedReader (new InputStreamReader(connection.getInputStream())); String line; while ((line = in.readLine()) != null) { sb.append(line); sb.append("\n"); } System.out.println(sb.toString()); } } catch(Exception e) { e.printStackTrace(); } } } |
11.05.2017, 05:30 | |
Ответы с готовыми решениями:
6
Консоль в Java Консоль в Java Консоль и Java IDE vs Консоль. Java |
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
|
|
11.05.2017, 09:28 | 2 |
@magistr в данном коде не много месте - где вылезает ошибка, но всеж - поставьте галочку для включение отладочной информации в код агента
у меня подозрение - не успевает отработать GC на к-то глобальном объекте попробуйте закрывать стримы вручную и, возможно - закрывать соединение
0
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 812
|
|
11.05.2017, 09:52 | 3 |
А закрывать соединения, сессии и контексты Пушкин будет? Ваш агент тупо зависает, при этом блокируя порты, а, следовательно, и возможность повторного запуска.
По воводу бубна. На будущее. Самый первый удар в него это должно было быть ваше действие по включению опции компиляции агента с включением отладочной ининформации. Вы этого не сделали.
0
|
mokystr
|
|
11.05.2017, 12:11 | 4 |
Да причём тут Пушкин? Сама суть не в сессиях, а в запуске... Запуск не работает - сессия не открыта ))
А по поводу "бубна" - это для увлекательного чтенния, отладка включена - HttpURLConnection.HTTP_OK выскакивает ((( |
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 812
|
|
11.05.2017, 13:32 | 5 |
1. Сессия не "не открыта", а не закрыта с предыдущего запуска. Вы не закрываете Notes Session, не закрываете AgentContext, не закрываете InputStream, не закрываете InputStreamReader, не закрываете BufferReader - похоже тут без Пушкина никак не справиться.
2. Агент скомпилирован без отладочной информации, это видно по stacktrace Код
at JavaAgent.NotesMain(Unknown Source) at lotus.domino.AgentBase.runNotes(Unknown Source) at lotus.domino.NotesThread.run(Unknown Source)
0
|
mokystr
|
|
11.05.2017, 14:05 | 6 |
Короче всё ясно, первый ответ - ответ! Второй уже троллинг какой-то ((
Тему можно закрыть. Ошибку эту не устранить - это баг в Lotus. В ИБИЭМ посоветовали забить... |
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
|
|
11.05.2017, 16:12 | 7 |
Сообщение от magistr
и отладка в агенте покажет строку - где имеем пустой объект --- Добавлено 12 май 2017. Первое сообщение размещено 12 май 2017 --- разница работы программы в jvm и агента - "громадна" и требует вдумчивого написания
0
|
11.05.2017, 16:12 | |
11.05.2017, 16:12 | |
Помогаю со студенческими работами здесь
7
Как включить java консоль? Java и JDK через консоль Ввод данных в консоль java Как запустить java прогу не через консоль. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |