Zamieranie okna - jak unikać ???

Oglądasz archiwalną wersję wątku "Zamieranie okna - jak unikać ???" z forum pl.comp.lang.java



Warlock - 10 Sty 2005, 05:41
Witam...

Mam taki oto problem...
Podczas wykonywania pewnej pętli, chcę aby uzytkownik otrzymywał komunikaty
genrowane przez aplikację.
Wszystko ładnie pięknie, jeśli komunikaty lecą na konsolę... działa to
ładnie i płynnie...

Chciałem to udoskonalić i wyświetlać je w oknie... niestety tu pojawia się
problem...
gdyż okno to zamiera podczas wykonywania pętli... kompletnie nie reaguje na
klikanie myszką...
dopiero po zakończeniu pętli budzi się i wyświetla całą gotową zawartość...

Wiem, że np. w Delphi jest polecenie, które wymusza odświeżanie takiego okna
i nie ma
problemu z zamieraniem nawet przy bardzo skomplikowanych zadaniach...
Jak rozwiązać ten problem w JAVA ???

Z góry dzięki...

Pozdrawiam
W.




wrobel.cwirek - 10 Sty 2005, 06:03
Witam...

Mam taki oto problem...
Podczas wykonywania pewnej pętli, chcę aby uzytkownik otrzymywał
komunikaty
genrowane przez aplikację.
Wszystko ładnie pięknie, jeśli komunikaty lecą na konsolę... działa to
ładnie i płynnie...

Chciałem to udoskonalić i wyświetlać je w oknie... niestety tu pojawia się
problem...
gdyż okno to zamiera podczas wykonywania pętli... kompletnie nie reaguje
na
klikanie myszką...
dopiero po zakończeniu pętli budzi się i wyświetla całą gotową
zawartość...

Wiem, że np. w Delphi jest polecenie, które wymusza odświeżanie takiego
okna
i nie ma
problemu z zamieraniem nawet przy bardzo skomplikowanych zadaniach...
Jak rozwiązać ten problem w JAVA ???

Z góry dzięki...



Nalezy robic na oddzielnym watku. Zobacz dokumentacje do JProgressBar, tam



klaku - 10 Sty 2005, 07:13
        SwingUtilities.invokeLater(new Runnable(){
            public void run(){

                .......................................
            }
        });

Witam...

Mam taki oto problem...
Podczas wykonywania pewnej pętli, chcę aby uzytkownik otrzymywał
komunikaty
genrowane przez aplikację.
Wszystko ładnie pięknie, jeśli komunikaty lecą na konsolę... działa to
ładnie i płynnie...

Chciałem to udoskonalić i wyświetlać je w oknie... niestety tu pojawia się
problem...
gdyż okno to zamiera podczas wykonywania pętli... kompletnie nie reaguje
na
klikanie myszką...
dopiero po zakończeniu pętli budzi się i wyświetla całą gotową
zawartość...

Wiem, że np. w Delphi jest polecenie, które wymusza odświeżanie takiego
okna
i nie ma
problemu z zamieraniem nawet przy bardzo skomplikowanych zadaniach...
Jak rozwiązać ten problem w JAVA ???

Z góry dzięki...

Pozdrawiam
W.





Warlock - 10 Sty 2005, 07:10

Nalezy robic na oddzielnym watku. Zobacz dokumentacje do JProgressBar, tam



A mógłbyś podać jakiś przykład lub zasadę...
Jakoś nie mogę zaskoczyć co tu ma być osobnym wątkiem...
Wątki to dla mnie nowość... :(

Schematycznie wygląda to u mnie tak:

Funkcja () {
//...
String napis;
for (.....) {
 // tu dzieją się różne rzeczy

 AddLine (napis);  // Ta funkcja dodaje kolejną linię opisującą stan
programu - zastępuje pierwotne System.out.println (napis);

 // dalsze zadania

 }

}



Będę bardzo dzwięczny za pomoc...




wrobel.cwirek - 10 Sty 2005, 10:52
| Nalezy robic na oddzielnym watku. Zobacz dokumentacje do JProgressBar,
| tam

A mógłbyś podać jakiś przykład lub zasadę...
Jakoś nie mogę zaskoczyć co tu ma być osobnym wątkiem...
Wątki to dla mnie nowość... :(

Schematycznie wygląda to u mnie tak:

Funkcja () {
//...
String napis;
for (.....) {
// tu dzieją się różne rzeczy

AddLine (napis);  // Ta funkcja dodaje kolejną linię opisującą stan
programu - zastępuje pierwotne System.out.println (napis);

// dalsze zadania

}
}

Będę bardzo dzwięczny za pomoc...



Moze wystarczy tak jak radzi klaku. Jak nie to sie cos wymysli.

Pozdrawiam



Warlock - 10 Sty 2005, 12:15

        SwingUtilities.invokeLater(new Runnable(){
            public void run(){

                .......................................
            }
        });



Moze wystarczy tak jak radzi klaku. Jak nie to sie cos wymysli.

Pozdrawiam



Niestety... albo to nie działa... albo nie do końca rozumiem jak to
wykorzystać...
Przybliże jak to zrobiłem:

private void Move_File(String SDirName, String TDirName) {
// tutaj są różniste instrukcje... między nimi:
Status_Add("Przenoszę plik: "+FileName);
System.out.print("Przenoszę plik: "+FileName);    // do testów
// itd....

}



Tutaj przerobiłem na:

    private void Status_Add(final String Line) {
        SwingUtilities.invokeLater(new Runnable(){
            public void run(){
                Status_Line.add(Line);
                jList1.setListData(Status_Line.toArray());
            }
        });
    }

I niestety nadal okienko zamiera na czas wykonywania... na konsoli wyświetla
poprawnie :(
Próbowałem uzyć tej metody dla całej funkcji Move_File - też bez skutku :(

Może jakaś jeszcze rada ???

Pozdrawiam
W.



klaku - 10 Sty 2005, 12:37
Sorki skopiowałem kod z innej częći z mojego softu, miało to tylko opóźnić
okno login, ale teraz podam całość, tak zalecali to zrobić producenci swing
i to działa, oczywiście swing nie posiada syschronizacji można także o tym
pomyśleć jak wątek będzie odpalony wiele razy:

Są dwie metody można zaimplementować interfejs Runnable dla całej klasy
wtedy wygląda to tak:    public class Dialog extends JDialog implements
Runnable {
        ..........
        public synchronized uruchom(){
            SwingUtilities.invokeLater(new Runnable(){
                public void run() {
                    Thread th = new Thread(this,"Mój process");
                    th.setPriority(Thread.MIN_PRIORITY);//albo pioryted
wyszy, eksperymentalnie
                    th.start();
                }
            });
        }

        public void run() {
           //startuję kod
           process();
        }

        private  synchronized process(){
           //kod do wykonania

       }

}



lub

Dialog extends JDialog{
        ..........
        public synchronized uruchom(){
            SwingUtilities.invokeLater(new Runnable(){
                public void run() {
                    Thread th = new Thread(new Runnable(){
                        public void run() {

                             //startuję kod
                             process();
                        }
                    });
                    th.setPriority(Thread.MIN_PRIORITY);//albo pioryted
wyszy, eksperymentalnie
                    th.start();
                }
            });
        }

        private  synchronized process(){
           //kod do wykonania

       }

}



|         SwingUtilities.invokeLater(new Runnable(){
|             public void run(){

|                 .......................................
|             }
|         });

| Moze wystarczy tak jak radzi klaku. Jak nie to sie cos wymysli.

| Pozdrawiam

Niestety... albo to nie działa... albo nie do końca rozumiem jak to
wykorzystać...
Przybliże jak to zrobiłem:

private void Move_File(String SDirName, String TDirName) {
// tutaj są różniste instrukcje... między nimi:
Status_Add("Przenoszę plik: "+FileName);
System.out.print("Przenoszę plik: "+FileName);    // do testów
// itd....
}

Tutaj przerobiłem na:

   private void Status_Add(final String Line) {
       SwingUtilities.invokeLater(new Runnable(){
           public void run(){
               Status_Line.add(Line);
               jList1.setListData(Status_Line.toArray());
           }
       });
   }

I niestety nadal okienko zamiera na czas wykonywania... na konsoli
wyświetla
poprawnie :(
Próbowałem uzyć tej metody dla całej funkcji Move_File - też bez skutku :(

Może jakaś jeszcze rada ???

Pozdrawiam
W.





Warlock - 10 Sty 2005, 14:00

(...)

Są dwie metody ...



Dzięki... dzięki... dzięki...

Skorzystałem z metody drugiej... jeszcze tylko pomyslę, co po co i jak to
zmieniać... ale wstępnie już wiem o co chodzi...

Pozdrawiam...
W.


przechwytywanie faktu zamknięcia okna z j ednej klasy z innej klasy
Okno JFrame i zkoñczenie tego okna
Przewijanie sie okna macierzystego przy window.open
tło komórki
  • pielegniarki opieka kielce
  • czemu po moim routerze jest getaway a potem
  • kretynskie smsy od roznych reklamodawcow
  • smieszne teksty historie
  • drzewka do kupienia
  • katowice awf fizjoterapia egzaminy
  • java;warcaby
  • tunezyjski aar 1066 1820
  • o symbianie na powaC2 nie czyli
  • Zbieranina wiadomości z for dyskusyjnych || Indeks