java.lang.Proces Zabijanie nie zostało wykonane

Tworzę aplikację SWT, która wywołuje zewnętrzny plik wykonywalny (powiedzmy abc.exe) w java.lang.Process. Ten nowy proces jest tworzony na przycisku „Start” na moim kompozycie.

Problem polega na tym, że jeśli plik wykonywalny abc.exe zawiesza się; cała moja powłoka SWT zawiesza się! Pomyślałem więc o dodaniu nowego przycisku o nazwie „Stop”, aby użytkownik mógł łatwo zakończyć zawieszony proces, ale ponieważ wszystko jest wykonywane w jednym wątku, nie mogę również nacisnąć „Stop”.

Czy ktoś może mi powiedzieć/pokazać, jak najlepiej rozwiązać ten problem.

Wielkie dzięki, Tor


person tor    schedule 03.07.2012    source źródło
comment
Wszystko to sugeruje, że nie uruchamiasz procesu w wątku w tle. Jeśli tak, rozwiązanie jest elementarne - użyj wątku w tle.   -  person Hovercraft Full Of Eels    schedule 04.07.2012


Odpowiedzi (2)


Będziesz musiał uruchomić proces w wątku w tle. Problem polega na tym, że uruchamiasz aplikację SWT i abc.exe w tym samym wątku. Dzieje się tak, gdy procesy na zmianę wykonują żądanie/odpowiedź, a proces abc.exe nie odpowiada, więc proces abc.exe pozostaje w oczekiwaniu — to samo powinno się zdarzyć, jeśli program abc.exe wykonuje długotrwały algorytm.

person Kevin Mangold    schedule 03.07.2012
comment
Inne procesy zawsze otrzymują własne wątki, ale często zdarza się, że wątek nadrzędny czeka na zakończenie podprocesu potomnego. - person Donal Fellows; 04.07.2012

Zabijanie procesu w rzeczywistości nie jest zaimplementowane w Javie, ponieważ jest BARDZO NIEBEZPIECZNE

person ControlAltDel    schedule 03.07.2012