Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Потоки и модальность JDialog / 25 сообщений из 27, страница 1 из 2
19.10.2005, 11:39
    #33332544
yelena
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потоки и модальность JDialog
Кажется, проблема та же, что и в http://sql.ru/forum/actualthread.aspx?tid=226749

Объясните, пожалуйста, почему при модальном JDialog приложение зависает, а при немодальном работает нормально. Что там происходит с потоками?
Можно ли оставить JDialog модальным и получить нужный мне результат?

Вот тестовый код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
 package  test;

 import  java.awt.BorderLayout;
 import  java.awt.Dimension;

 import  javax.swing.JFrame;
 import  javax.swing.JPanel;
 import  javax.swing.JLabel;
 import  java.awt.*;
 import  javax.swing.JButton;
 import  javax.swing.*;
 import  java.awt.event.*;

 public   class  Frame1  extends  JFrame {

     static  Frame1 frame;

    JPanel contentPane;
    BorderLayout borderLayout1 =  new  BorderLayout();
    JLabel jLabel1 =  new  JLabel();
    JButton jButton1 =  new  JButton();

    String text;

     public  Frame1() {
         try  {
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            jbInit();
        }  catch  (Exception exception) {
            exception.printStackTrace();
        }
    }

     private   void  jbInit()  throws  Exception {
        contentPane = (JPanel) getContentPane();
        contentPane.setLayout(borderLayout1);
        setSize( new  Dimension( 100 ,  100 ));
        setLocation( 200 ,  200 );
        setTitle("Frame Title");

        text = "Текст";

        jLabel1.setText(text);
        jButton1.setText("Кнопка");
        jButton1.addActionListener( new  ActionListener() {
             public   void  actionPerformed(ActionEvent actionEvent) {

                Thread th =  new  Thread(){
                     public   void  run() {

                        MyDialog myDialog =  new  MyDialog(frame, true);
                        //MyDialog myDialog = new MyDialog(frame, false);
                         synchronized  (myDialog) {
                             try  {
                                myDialog.setVisible(true);
                                myDialog.wait();
                                jLabel1.setText(text);
                            }  catch  (InterruptedException ex) {
                                ex.printStackTrace();
                            }
                        }
                    }
                };

                th.start();
            }
        });
        contentPane.add(jLabel1, java.awt.BorderLayout.CENTER);
        contentPane.add(jButton1, java.awt.BorderLayout.SOUTH);
    }

      public   static   void  main(String[] args) {
        frame =  new  Frame1();
        frame.pack();
        frame.setVisible(true);
    }


     class  MyDialog  extends  JDialog  implements  ActionListener {

        JButton ok;

         public  MyDialog(Frame owner,  boolean  modal) {
             super (owner, modal);
             try  {
                setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);

                Dimension dialogSize =  new  Dimension( 100 ,  100 );
                setSize(dialogSize);

                JPanel panel = (JPanel)getContentPane();
                panel.setLayout( new  FlowLayout(FlowLayout.CENTER));
                ok =  new  JButton("OK");
                ok.addActionListener( this );
                panel.add(ok);

                pack();
            }  catch  (Exception exception) {
                exception.printStackTrace();
            }
        }

         public   synchronized   void  actionPerformed(ActionEvent actionEvent) {
            text = "Текст1";
            notify();
            dispose();
        }
    }
}
...
Рейтинг: 0 / 0
19.10.2005, 12:01
    #33332640
wessen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потоки и модальность JDialog
не совсем понятно, что вообще нужно, но, я немного переделал код и диалог ведет себя так, как и должен, все что закоментировал, нафиг не нужно. При чем поведение диалога правильное когда он модалный и не модальный.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
 package  test;

 import  java.awt.BorderLayout;
 import  java.awt.Dimension;

 import  javax.swing.JFrame;
 import  javax.swing.JPanel;
 import  javax.swing.JLabel;
 import  java.awt.*;
 import  javax.swing.JButton;
 import  javax.swing.*;
 import  java.awt.event.*;

 public   class  Main  extends  JFrame {
    
     static  Main frame;
    
    JPanel contentPane;
    BorderLayout borderLayout1 =  new  BorderLayout();
    JLabel jLabel1 =  new  JLabel();
    JButton jButton1 =  new  JButton();
    
    String text;
    
     public  Main() {
         try  {
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            jbInit();
        }  catch  (Exception exception) {
            exception.printStackTrace();
        }
    }
    
     private   void  jbInit()  throws  Exception {
        contentPane = (JPanel) getContentPane();
        contentPane.setLayout(borderLayout1);
        setSize( new  Dimension( 100 ,  100 ));
        setLocation( 200 ,  200 );
        setTitle("Frame Title");
        
        text = "Text";
        
        jLabel1.setText(text);
        jButton1.setText("Button");
        jButton1.addActionListener( new  ActionListener() {
             public   void  actionPerformed(ActionEvent actionEvent) {
                
//                Thread th = new Thread(){
//                    public void run() {
                        
                        MyDialog myDialog =  new  MyDialog(frame, true);
                        //MyDialog myDialog = new MyDialog(frame, false);
//                        synchronized (myDialog) {
//                            try {
                                myDialog.setVisible(true);
                                //myDialog.wait();
                                jLabel1.setText(text);
//                            } catch (InterruptedException ex) {
//                                ex.printStackTrace();
//                            }
//                        }
//                    }
//                };
                
               // th.start();
            }
        });
        contentPane.add(jLabel1, java.awt.BorderLayout.CENTER);
        contentPane.add(jButton1, java.awt.BorderLayout.SOUTH);
    }
    
     public   static   void  main(String[] args) {
        frame =  new  Main();
        frame.pack();
        frame.setVisible(true);
    }
    
    
     class  MyDialog  extends  JDialog  implements  ActionListener {
        
        JButton ok;
        
         public  MyDialog(Frame owner,  boolean  modal) {
             super (owner, modal);
             try  {
                setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
                
                Dimension dialogSize =  new  Dimension( 100 ,  100 );
                setSize(dialogSize);
                
                JPanel panel = (JPanel)getContentPane();
                panel.setLayout( new  FlowLayout(FlowLayout.CENTER));
                ok =  new  JButton("OK");
                ok.addActionListener( this );
                panel.add(ok);
                
                pack();
            }  catch  (Exception exception) {
                exception.printStackTrace();
            }
        }
        
         public   synchronized   void  actionPerformed(ActionEvent actionEvent) {
            text = "Текст1";
//            notify();
            dispose();
        }
    }
}
...
Рейтинг: 0 / 0
19.10.2005, 12:12
    #33332681
yelena
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потоки и модальность JDialog
to wessen:
Во-первых, можно быть и повежливее. (Это по поводу "нафиг не нужно").
Во-вторых, это тестовый код, чтобы проверить работу потоков. В оригинале приложение намного сложнее. Потоки мне здесь необходимы. Поэтому, чтобы не морочить людям голову огромным количеством кода, я сделала тест, который выявляет суть проблемы.
В-третьих, хотелось бы получить ответ на поставленный вопрос относительно потоков.
...
Рейтинг: 0 / 0
19.10.2005, 13:09
    #33332909
Jozic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потоки и модальность JDialog
yelenaКажется, проблема та же, что и в http://sql.ru/forum/actualthread.aspx?tid=226749

Объясните, пожалуйста, почему при модальном JDialog приложение зависает, а при немодальном работает нормально. Что там происходит с потоками?
Можно ли оставить JDialog модальным и получить нужный мне результат?

Вот тестовый код:


А какой вообще результат ожидается от этого кода?

после
Код: plaintext
myDialog.setVisible(true);

приложение ждет когда вы закроете диалог, он ведь модальный.
а закрыть низя ибо синхронайзд по этому же диалогу ...
...
Рейтинг: 0 / 0
19.10.2005, 13:23
    #33332962
yelena
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потоки и модальность JDialog
Спасибо, вот уже что-то, хотя не совсем понятно.
Если можно, то, пожалуйста, подробнее про зависимость закрытия от синхронайзд в случае с модальностью.
Ведь в синхронизированном методе я закрываю диалоговое окно.

Результат хотелось бы получить такой же, как и в случае, если диалоговое окно не является модальным, т.е. поменять текст во фрейме.
...
Рейтинг: 0 / 0
19.10.2005, 13:37
    #33333014
wessen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потоки и модальность JDialog
Зачем запускать диалог в отдельном потоке?
...
Рейтинг: 0 / 0
19.10.2005, 13:53
    #33333068
yelena
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потоки и модальность JDialog
to wessen:
Затем, что в оригинале у меня в приложении одновременно могут выполняться несколько потоков.
В одном из них из диалога нужно получить данные для нормального продолжения работы.
...
Рейтинг: 0 / 0
19.10.2005, 14:03
    #33333100
wessen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потоки и модальность JDialog
yelenato wessen:
Затем, что в оригинале у меня в приложении одновременно могут выполняться несколько потоков.
В одном из них из диалога нужно получить данные для нормального продолжения работы.

мне кажется, что вы неверно выбрали способ взаимодействия потоков и диалога.
"... из диалога нужно получить данные.. " - ну так создайте нормально диалог, затем создавайте нормально потоки и передавайте в них ссылки на диалог.
...
Рейтинг: 0 / 0
19.10.2005, 14:49
    #33333227
Jozic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потоки и модальность JDialog
yelenaСпасибо, вот уже что-то, хотя не совсем понятно.
Если можно, то, пожалуйста, подробнее про зависимость закрытия от синхронайзд в случае с модальностью.
Ведь в синхронизированном методе я закрываю диалоговое окно.

Результат хотелось бы получить такой же, как и в случае, если диалоговое окно не является модальным, т.е. поменять текст во фрейме.
Ну запуская модальный диалог в синхронайзд, вы вешаете поток до того как диалог закроецца, а закрываецца он уже из другого потока (должен закрывацца :)). Но другой поток его закрыть не может, так как метод который закрывает тоже синхронайзд и находицца в классе по объекту которого уже стоит синхронайзд :))

можно вынести имплементацию акшнлистенера в отдельный класс, тогда дедлока не будет.

и еще, зачем там wait()? я чегото не понял...
...
Рейтинг: 0 / 0
19.10.2005, 14:59
    #33333252
Guest_2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потоки и модальность JDialog
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
 import  java.awt.BorderLayout;
 import  java.awt.Dimension;

 import  javax.swing.JFrame;
 import  javax.swing.JPanel;
 import  javax.swing.JLabel;
 import  java.awt.*;
 import  javax.swing.JButton;
 import  javax.swing.*;
 import  java.awt.event.*;

 public   class  Frame1  extends  JFrame {
     static  Frame1	frame;
    JPanel		   contentPane;
    BorderLayout 	borderLayout1 =  new  BorderLayout();
    JLabel 		   jLabel1 =  new  JLabel();
    JButton 		  jButton1 =  new  JButton();
    String 		   text;

     public  Frame1() {
         try  {
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            jbInit();
        }  catch  (Exception exception) {
            exception.printStackTrace();
        }
    }//endConstructor

     private   void  jbInit()  throws  Exception {
        contentPane = (JPanel) getContentPane();
        contentPane.setLayout(borderLayout1);
        setSize( new  Dimension( 100 ,  100 ));
        setLocation( 200 ,  200 );
        setTitle("Frame Title");
        text = "Текст";

        jLabel1.setText(text);
        jButton1.setText("Êíîïêà");
        jButton1.addActionListener( new  ActionListener() {
        	 public   void  actionPerformed(ActionEvent actionEvent) {
	            Thread th =  new  Thread(){
	                 public   void  run() {
	                    MyDialog myDialog =  new  MyDialog(frame, true);
	                    //synchronized (myDialog) {
	                    //    try {
	                             myDialog.setVisible(true);
	                             //myDialog.wait();
	                             jLabel1.setText(text);
	                    //    } catch (InterruptedException ex) {
	         			//        ex.printStackTrace();
	                    //    }//endTryCatch
	                    //}
	                }//end run
	            };
	            th.start();
	        }//end actionPerformed
        });
        contentPane.add(jLabel1, java.awt.BorderLayout.CENTER);
        contentPane.add(jButton1, java.awt.BorderLayout.SOUTH);
    }//end jbInit

      public   static   void  main(String[] args) {
        frame =  new  Frame1();
        frame.pack();
        frame.setVisible(true);
    }//end main


     class  MyDialog  extends  JDialog  implements  ActionListener {
        JButton ok;

         public  MyDialog(Frame owner,  boolean  modal) {
             super (owner, modal);
             try  {
                setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
                setSize( new  Dimension( 100 ,  100 ));
                JPanel panel = (JPanel)getContentPane();
                panel.setLayout( new  FlowLayout(FlowLayout.CENTER));
                ok =  new  JButton("OK");
                ok.addActionListener( this );
                panel.add(ok);
                pack();
            }  catch  (Exception exception) {
                exception.printStackTrace();
            }
        }//endConstructor

         public  /*synchronized*/  void  actionPerformed(ActionEvent actionEvent) {
            text = "Текст1";
            //&notify();
            dispose();
        }//end actionPerformed
    }//endClass MyDialog
    
}//endClass Frame1

Так правильно?
...
Рейтинг: 0 / 0
19.10.2005, 15:29
    #33333344
yelena
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потоки и модальность JDialog
to Guest_2:
Да. Так правильно.
Если диалог не модальный, то без синхронизации и wait нужного результата получить не удается.
Ну а если он модальный, то действительно не нужно ни синхронизации, ни wait.

Большое спасибо.
...
Рейтинг: 0 / 0
20.10.2005, 14:34
    #33335253
yelena
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потоки и модальность JDialog
Все же хотелось бы продолжить разговор о поведении потоков.

Когда Jozic написал "Ну запуская модальный диалог в синхронайзд, вы вешаете поток до того как диалог закроецца, а закрываецца он уже из другого потока (должен закрывацца :)). Но другой поток его закрыть не может, так как метод который закрывает тоже синхронайзд и находицца в классе по объекту которого уже стоит синхронайзд :))", наверное, он имел в виду следующее:

"Если поток блокируется тогда, когда он сам блокирует объект, то в таком случае блокируется каждый поток, вызывающий синхронизированный метод для этого объекта".

Возвращаясь к моему тестовому примеру.
Возникает первый вопрос: в связи с чем был заблокирован поток, блокирующий диалоговое окно?

И второй вопрос: если в отладчике JBuilder'а поставить контрольные точки на
myDialog.setVisible(true); и на myDialog.wait(); и на notify(); и запустить отладчик, то в результате видим, что notify и wait отрабатывают раньше, чем setVisible. C чем это связано? Ведь кнопку в диалоговом окне я еще не нажимала (оно еще не появилось). Поэтому как может отработать notify? И что срабатывает раньше: notify или wait? И как это влияет на дальнейшее поведение потоков?
...
Рейтинг: 0 / 0
20.10.2005, 14:40
    #33335278
yelena
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потоки и модальность JDialog
Если поток был блокирован при вызове wait, то поток то блокируется, а объект освобождается. И другие потоки могут им воспользоваться.
Чего-то я здесь не понимаю.
...
Рейтинг: 0 / 0
20.10.2005, 16:09
    #33335539
wessen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потоки и модальность JDialog
Ленусик, еще раз скажу, грешное это дело создовать диалог в потоке, не делайте так никогда.
...
Рейтинг: 0 / 0
20.10.2005, 16:14
    #33335560
yelena
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потоки и модальность JDialog
ну, уж не знаю, как ласково обратиться

мне известно о проблемах взамодействия Swing c потоками
только ведь хочется разобраться, что происходит в моем тестовом примере
всего лишь
сейчас вопрос правильности или неправильности меня уже не интересует
...
Рейтинг: 0 / 0
20.10.2005, 16:25
    #33335600
Jozic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потоки и модальность JDialog
yelena
... наверное, он имел в виду следующее:

"Если поток блокируется тогда, когда он сам блокирует объект, то в таком случае блокируется каждый поток, вызывающий синхронизированный метод для этого объекта".

Я иммел ввиду следующее:
Поток не блокируется когда блокирует объект, а блокируется он когда вызываецца модальный диалог. Но в тоже время блокировка по объекту, не дает другому потоку выполнить синхронайзд метод класса, инстансом которого являецца блокированный объект. Вот :). В вашем случае это метод акшнлистенера, который закрывает диалог. Как я уже говорил, если этот метод вынести в другой класс, то взаимной блокировки не будет

yelena
Возвращаясь к моему тестовому примеру.
Возникает первый вопрос: в связи с чем был заблокирован поток, блокирующий диалоговое окно?

Только что написал :)

yelena
И второй вопрос: если в отладчике JBuilder'а поставить контрольные точки на
myDialog.setVisible(true); и на myDialog.wait(); и на notify(); и запустить отладчик, то в результате видим, что notify и wait отрабатывают раньше, чем setVisible. C чем это связано? Ведь кнопку в диалоговом окне я еще не нажимала (оно еще не появилось). Поэтому как может отработать notify? И что срабатывает раньше: notify или wait? И как это влияет на дальнейшее поведение потоков?
Это у вас Жбилдер чето врет :), такой ситуации у меня не было. Ставил брейкпоинты, все срабатывает как надо.
...
Рейтинг: 0 / 0
20.10.2005, 16:32
    #33335623
wessen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потоки и модальность JDialog
в вашем примере(оторваном от реальности), в любом случае нужно пожертвовать каким нибудь синхронайзем, например так:

Код: plaintext
1.
2.
3.
4.
5.
6.
 public  /*synchronized*/  void  actionPerformed(ActionEvent actionEvent) {
            System.out.println("in actionPerformed");
            text = "Текст1";
            //notify();
            dispose();
        }
...
Рейтинг: 0 / 0
20.10.2005, 16:47
    #33335687
Jozic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потоки и модальность JDialog
wessenв вашем примере(оторваном от реальности), в любом случае нужно пожертвовать каким нибудь синхронайзем, например так:

Можно пожертвовать, а можно и не жертвовать (в случае с вынесением метода в отдельный класс :)) но нужно подумать нужна ли там синхронизация вообще :)

а насчет вейтов и нотифаев я все равно не понял, зачем они там были нужны :)
...
Рейтинг: 0 / 0
20.10.2005, 16:48
    #33335695
yelena
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потоки и модальность JDialog
to Jozic:
ну, если JBuilder врет, то не у меня одной :)

и, насколько я понимаю, поток у меня блокируется свинговым потоком управления событиями при визуализации модального диалога
...
Рейтинг: 0 / 0
20.10.2005, 16:52
    #33335703
yelena
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потоки и модальность JDialog
да сначала у меня диалог немодальный был
от него wait и notify остались
когда я диалог модальным сделала, они стали не нужны
я просто с переходом на модальность немного запуталась и не убрала их сразу

кажется, теперь все встало на свои места
...
Рейтинг: 0 / 0
20.10.2005, 16:56
    #33335716
Jozic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потоки и модальность JDialog
yelenato Jozic:
ну, если JBuilder врет, то не у меня одной :)
Незнаю, может быть :) Я использовал ИДЕЮ, брейкпоинты сработали как и должно быть.
yelena
и, насколько я понимаю, поток у меня блокируется свинговым потоком управления событиями при визуализации модального диалога
Не знаю точно как оно все реализовано в деталях, но блокировка происходит благодаря модальному диалогу. пока диалог не закрыт, текущий поток управления дальше не пойдет.
...
Рейтинг: 0 / 0
20.10.2005, 17:56
    #33335875
wessen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потоки и модальность JDialog
авторМожно пожертвовать, а можно и не жертвовать (в случае с вынесением метода в отдельный класс :)) но нужно подумать нужна ли там синхронизация вообще :)

Вынести метод в др. класс, это будет то же самое, что его оставить на месте, но сделать не синхронезированным.
...
Рейтинг: 0 / 0
20.10.2005, 19:06
    #33336041
Jozic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потоки и модальность JDialog
wessen авторМожно пожертвовать, а можно и не жертвовать (в случае с вынесением метода в отдельный класс :)) но нужно подумать нужна ли там синхронизация вообще :)

Вынести метод в др. класс, это будет то же самое, что его оставить на месте, но сделать не синхронезированным.
В данном конкретном случае результат одинаковый, а так позволю себе не согласицца :))
...
Рейтинг: 0 / 0
21.10.2005, 11:17
    #33336869
wessen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потоки и модальность JDialog
и с чем ты не согласен?
...
Рейтинг: 0 / 0
21.10.2005, 12:41
    #33337192
Jozic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потоки и модальность JDialog
wessenи с чем ты не согласен?
С вашим высказыванием :)
wessenВынести метод в др. класс, это будет то же самое, что его оставить на месте, но сделать не синхронезированным
синхронайзд метод наверное ведь отличается от не синхронайзд, а? :)

Вынесение метода в другой класс, являецца своего рода рефакторингом, который не скажецца на том, что данный метод доступен для выполнения только одному потоку в конкретный момент времени.
Я согласен, что в данном конкретном примере, это решает проблему, но возможно синхронайзд там действительно нужен по каким либо причинам и убрать его нельзя.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Потоки и модальность JDialog / 25 сообщений из 27, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]