atomizacja obiektu własnej klaasy

Oglądasz archiwalną wersję wątku "atomizacja obiektu własnej klaasy" z forum pl.comp.lang.java



galdrian - 24 Wrz 2005, 13:57
Witam!
Mój problem wygląda następująco. Mam dwie klasy (JFrame i JDialog). W
głównej klasie (JFrame) deklaruję obiekt drugiej i chcę go stworzyć.
Jest jedno "ale", dalsza część głównej klasy - za inicjalizacją obiektu
- ma się wykonać dopiero, gdy zamknę JDialog.

Będę wdzięczny za pomoc.

Galdrian




Wojciech Ciesielski - 24 Wrz 2005, 15:14
Watki? Metody wait/notify itd?


Galdrian - 24 Wrz 2005, 16:31

Watki? Metody wait/notify itd?



Niby wszystko jasne ... ale nie za bardzo wiem jak się za to zabrać.

Jest sobie:

public class Glowna extends JFrame implements ActionListener, Runnable{
   private Thread mainThread;
   ...
   private JButton przycisk;

   public Glowna(){
     ...
     mainThread = new Thread(this);
     mainThread.start();
   }

   public void run(){
     initLayout();      // moja własna metoda
     setVisible(true);
   }

   private void initLayout(){
     ...
     przycisk.addActionListener(new ActionListener(){
       public  void  actionPerformed(ActionEvent e){
         menuUstawieniaZrodla();
       }
     });
     ...
   }

   menuUstawieniaZrodla(){
     ustawieniaZrodla ustawieniazrodla = new ustawieniaZrodla();
   }

}



//---------------------------------------------------------------------

oraz:

public class ustawieniaZrodla extends JDialog implements ActionListener,
Runnable {
   private JButton przyciskZapisz;

   public ustawieniaZrodla(){
     ...
   }

   public void run(){
     initLayout();      // moja własna metoda
     setVisible(true);
   }

   public void initLayout(){
     ...
     przyciskZapisz.addActionListener( new ActionListener() {
       public void actionPerformed (ActionEvent e) {
         zapiszUstawienia();
       }
     });
     ...
   }

   public void zapiszUstawienia(){
     ...
     dispose();
   }

}



Co tu jest źle, no i czego brak ??



Wojciech Ciesielski - 24 Wrz 2005, 20:54

public class Glowna extends JFrame implements ActionListener, Runnable{



pierwsza rzecz: nazwy zmiennych itd - PO ANGIELSKU. Z dwoch powodow:
1. angielski to jezyk bardziej "tresciwy" - to samo mozesz nazwac krocej
2. to jest standard w nazewnictwie - niezaleznie od tego czy robisz w
Microsoft'cie czy Comarch'u

  private Thread mainThread;
  ...



...............cut............

Co tu jest źle, no i czego brak ??



Zasada taka (najprosciej - mozna lepiej):

w klasie JFrame tworzysz nowy watek, ktory robi co tylko chcesz. Klasa ta
zawiera tez zmienna boolean: shouldGoFurther = false. Klasa JFrame po
wywolaniu nowego watku robi
while(shouldGoFurther == false) {
Thread.currentThread.sleep(50);

}



Twoj nowy watek robi co ma zrobic a jak skonczy, to ustawia w klasie JFrame
parametr shouldGoFurther na TRUE. I wio :]




Galdrian - 25 Wrz 2005, 05:26

| public class Glowna extends JFrame implements ActionListener, Runnable{

pierwsza rzecz: nazwy zmiennych itd - PO ANGIELSKU. Z dwoch powodow:
1. angielski to jezyk bardziej "tresciwy" - to samo mozesz nazwac krocej
2. to jest standard w nazewnictwie - niezaleznie od tego czy robisz w
Microsoft'cie czy Comarch'u

|  private Thread mainThread;
|  ...

...............cut............

| Co tu jest źle, no i czego brak ??

Zasada taka (najprosciej - mozna lepiej):

w klasie JFrame tworzysz nowy watek, ktory robi co tylko chcesz. Klasa ta
zawiera tez zmienna boolean: shouldGoFurther = false. Klasa JFrame po
wywolaniu nowego watku robi
while(shouldGoFurther == false) {
Thread.currentThread.sleep(50);
}
Twoj nowy watek robi co ma zrobic a jak skonczy, to ustawia w klasie JFrame
parametr shouldGoFurther na TRUE. I wio :]



a co jeśli:

while( !czyIscDalej ){
   try{
     Thread.currentThread().sleep(50);
   }catch( InterruptedException e ){
     System.out.println(e);
   }

}



pokazuje Warning: The static method sleep(long) from the type Thread
should be accessed in a static way ?



Ma..g - 25 Wrz 2005, 07:07
Zamiast
Thread.currentThread().sleep(50);
napisz
Thread.sleep(50);


Wojciech Ciesielski - 25 Wrz 2005, 07:21

pokazuje Warning: The static method sleep(long) from the type Thread
should be accessed in a static way ?



Nie przejmowac sie tym warningiem.



Galdrian - 25 Wrz 2005, 08:05

| pokazuje Warning: The static method sleep(long) from the type Thread
| should be accessed in a static way ?

Nie przejmowac sie tym warningiem.



To ciekawe, zważywszy na sposób dostępu do pól i metod statycznych, no i
fakt, że program nie działa ... Ale dzięki za chęci. Będę dalej szukał
rozwiązania.



Galdrian - 25 Wrz 2005, 09:31

Rozwiązanie okazało się banalnie proste. Wystarczyło odpowiednio(!!!)
wykorzystać JDialog - żadnych wątków itp.



Twelve Hungry Mammoths - 25 Wrz 2005, 13:01

a co jeśli:

while( !czyIscDalej ){
   try{
     Thread.currentThread().sleep(50);
   }catch( InterruptedException e ){
     System.out.println(e);
   }
}

pokazuje Warning: The static method sleep(long) from the type Thread  
should be accessed in a static way ?



zamiast Thread.currentThread().sleep(50) wywoluj Thread.sleep (50).  

pzdr
        szeryf



a1 - 26 Wrz 2005, 04:07




<ciah

Nie tak dawno o tym bylo, poszukaj sobie watku i dialogach modalnych.


Implementacja w³asnych ceche'y obiektów, interfejsy miêdzymodu³owe.
(struts + form) jak odwolac sie na stronie JSP do pola obiektu umieszczonego w formularzu?
jakiś tool eclipsa pokazujący wystapienia obiektu danej klasy
Spring, dostęp do warstwy serwisu z obiektu domeny (POJO)
  • obroze szelki smycze vol 1 240
  • program emulek
  • znowu compiz
  • numer 90
  • borland pascal 7 0 download 40
  • fartuch wodoodporny
  • towar w sklepach
  • politechnika koszalin
  • wymiana ciepB3a 300
  • Zbieranina wiadomości z for dyskusyjnych || Indeks