Nieoczekiwany zwrot wartości (Java Result: 1212...)

0

Witam,

Pracuję nad dość dużym projektem, który ma około 20 tys linii kodu w Javie. Przynajmniej połowę przejąłem po poprzednikach, wprowadzam poprawki i rozbudowuję projekt. Ostatnio pojawił się problem, za który nie bardzo wiem jak się zabrać. Otóż aplikacja (która wykonuje się czasami całą dobę), w różnorakim momencie zwraca "Java Result: [tu duży int]". Okno aplikacji zamyka się, zaś w konsoli mam tylko ten rezultat (aplikacja nie jest jeszcze stand alone, uruchamiana jest z NetBeansa). Więcej konkretów podam przy następnym takim problemie, bo nie udało mi się tego do tej pory zapisać. Co może być tego przyczyną? Czy wartość tego inta coś znaczy? W jakich przypadkach sytuacja taka się zdarza?

Jest to ogólnie dość dziwne, ponieważ nie leci żaden wyjątek (chyba), tylko jakiś nieoczekiwany zwrot (return? )...

0

Zapewne któryś z poprzedników pozostawił jakiś debug. Moja propozycja to przeszukanie całego projektu pod kątem wyrażenia "Java Result" i zobaczenie co kryje się za tym komunikatem w kodzie.

0

A nie bedzie to wynik jakiegos System.exit([bardzo duzy int)]? Nie uzywam za czesto NB i nie wiem co "Java Result: [costam]" oznacza dla niego, ale skoro nie ma wyjatku ani zadnych komunikatow o failu JVM to jedyne co mi przychodzi do glowy. Zrob szukanie w plikach .java stringa 'System.exit(' (albo w NB, albo grep jak NB nie umie) i albo bedziesz mial odpowiedz albo wyukluczysz ta mozliwosc.

0

@up, ja podejrzewałem dziwną obsługę wyjątku, ale poszukałem. http://www.daniweb.com/forums/thread152140.html

0

Mam w dwóch miejscach swoje exity, których w sumie nie powinno faktycznie być. Są to dwa razy System.exit(1), jednak na pewno po Java Result: nie było liczby 1, tylko coś większego. Zmienię to jednak w kodzie...

Edit: Sprawdziłem naocznie, że System.exit(1) daje Java Result: 1, więc to niestety nie to. Być może problemem są używane biblioteki, ponieważ używam jednej biblioteki do SNMP: org.netsnmp i jednej do telnetu: org.apache.commons.net.telnet.

Program zatrzymał się jednak przy korzystaniu z SNMP, więc bardziej podejrzewałbym tą bibliotekę.

0

No ok, ale skoro System.exit(1) daje "Java Result: 1" to analogicznie "Java Result: [duzy int]" jest pewnie powodowany przez System.exit([duzy int]), niekoniecznie w twoim kodzie, moze w jakiejs bibliotece?

@bogdans: o co Ci chodzi? Pytal co moze byc przyczna, wiec powiedzialem, Koziolek rowniez. Za to Twoj link nie daje nic, kompletnie nic. No i okazuje sie ze jednak to pewnie jakis exit()...

0

Nie używam NB, zatem nie wiedziałem, że System.exit(n); coś wypisuje na konsoli. (W Eclipse i programach uruchamianych poza IDE, nic się nie pojawia na konsoli). Przyjąłem zatem, że za komunikat JavaResult: liczba odpowiada JVM sygnalizując bardzo dziwny błąd.

0

Ok, ale niestety, jest to: "Java Result: -1073740940"... Wyskoczyło jeszcze raz :(

0
bo napisał(a)

Nie używam NB, zatem nie wiedziałem, że System.exit(n); coś wypisuje na konsoli. (W Eclipse i programach uruchamianych poza IDE, nic się nie pojawia na konsoli). Przyjąłem zatem, że za komunikat JavaResult: liczba odpowiada JVM sygnalizując bardzo dziwny błąd.

Nie wiedziale, zalozylem - czyli nas / mnie oskarzales o strzelanie bez sprawdzenia a sam zrobiles to samo, lub nawet gorzej, bo ja chociaz skojarzylem ze cos takiego widzialem w NB w zwiazku z exit, dlatego napisalem. Przyganial kocial garnkowi, jednym slowem.
Sorry za offtop.

0

Autor - czego Ty od nas oczekujesz? Ze znamy kody wyjscia JVM na pamiec? Ze powiemy gdzie jest blad wsrod tych 20k linii kodu? Nic nie wiemy na temat aplikacji poza tym ze dziala cala noc, chodz w NB i sie wywala z dziwnym komunikatem.
Co to za app? Konsolowy, Swing? Jesli Swing to czego uzywasz (jakich komponentow)? Pytam bo bo dal linka ze costam nie pasi JInternalFrame - uzywasz tego?
Przeczytaj: http://catb.org/esr/faqs/smart-questions.html.

0

@::., zaszło nieporozumienie. Nie miałem intencji oskarżać Cię o cokolwiek.

0

Wiem, że nie wiecie wiele na temat aplikacji, jednak nie jestem w stanie Wam tutaj przedstawić całego kodu. Wiem, już w którym miejscu się wykrzacza (mniej więcej, pogłębiam debugging dodając coraz bardziej szczegółowe komunikaty). To czego od Was oczekiwałem to rzucania pomysłami, bo to zawsze pomaga. Zawsze znajdzie się ktoś kto miał podobny problem...

0
peterpz napisał(a)

pogłębiam debugging dodając coraz bardziej szczegółowe komunikaty)

Czyli uzywasz tzw "dupa-debugging" (nazwa pochodzi od najczesciej bodajze uzywanej w takim debugowaniu linijki: System.out.println("dupa")? Moze sprobuj uzywac logowania?

@bo: peace.

0

Ja miałem podobny problem w równie dużym projekcie. Problem był związany z biblioteką a dokładnie z jej inicjalizacją, deinicjalizacją. Wtedy wyskakiwały losowe duże inty. Była do dllka podpinana przez JNA. Jeżeli nie używasz natywnego kodu nie mam pomysłu, ale jeżeli tak to sprawdz czy przed Twoim standartowym exit(1) jest deinicjalizacja robiona i w jaki sposób.

0
lipkerson napisał(a)

Ja miałem podobny problem w równie dużym projekcie. Problem był związany z biblioteką a dokładnie z jej inicjalizacją, deinicjalizacją. Wtedy wyskakiwały losowe duże inty. Była do dllka podpinana przez JNA. Jeżeli nie używasz natywnego kodu nie mam pomysłu, ale jeżeli tak to sprawdz czy przed Twoim standartowym exit(1) jest deinicjalizacja robiona i w jaki sposób.

I chyba masz rację. Przenosiłem projekt na innego kompa i mimo wszystkich bibliotek, bez jednej dllki nie zadziałało, więc dllka w moich includach jest potrzebna. Zdziwiło mnie to. Możesz mi wytłumaczyć po co one są?

No i masz rację dlatego, że u mnie prawdopodobnie także to działo się przy inicjalizacji i deinicjalizacji. Tzn znalazłem miejsce w kodzie, gdzie praktycznie bez większego odstępu zamykam połączenia, a zaraz otwieram je na nowo (na nowo startuje klasa z biblioteki odpowiedzialna za połączenie snmp, wcześniej poprzednia się rozłączała). Uważam, że to się działo zbyt szybko i z na razie niewiadomych mi przyczyn był ten błąd (nie zdarzał się zawsze, kod działał OK, co jest najtrudniejsze do sprawdzenia. Dopiero po kilku godzinach wpadał ten zwrot). Dodałem sleepa(500) w tym miejscu, bo mogę tyle spokojnie poczekać i na razie testuję kod, ale od 12 godzin pracy aplikacji nic takiego się nie wydarzyło.

Czy może mi ktoś powiedzieć o co mogło chodzić? Może to mieć związek z dllką? Co ona robi? JNA nie używam, chyba że te biblioteki to robią wewnątrz.

0
::. napisał(a)
peterpz napisał(a)

pogłębiam debugging dodając coraz bardziej szczegółowe komunikaty)

Czyli uzywasz tzw "dupa-debugging" (nazwa pochodzi od najczesciej bodajze uzywanej w takim debugowaniu linijki: System.out.println("dupa")? Moze sprobuj uzywac logowania?

@bo: peace.

Często używam dupa-debugging, tutaj jako że mój system.out po tym błędzie znikał (mam go przekierowanego do jTextArea) zrobiłem sobie zapisywanie tego strumienia do pliku (czyli coś w rodzaju logowania).

1 użytkowników online, w tym zalogowanych: 0, gości: 1