powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Потоки и модальность JDialog
25 сообщений из 27, страница 1 из 2
Потоки и модальность JDialog
    #33332544
yelena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кажется, проблема та же, что и в 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
Потоки и модальность JDialog
    #33332640
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не совсем понятно, что вообще нужно, но, я немного переделал код и диалог ведет себя так, как и должен, все что закоментировал, нафиг не нужно. При чем поведение диалога правильное когда он модалный и не модальный.
Код: 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
Потоки и модальность JDialog
    #33332681
yelena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to wessen:
Во-первых, можно быть и повежливее. (Это по поводу "нафиг не нужно").
Во-вторых, это тестовый код, чтобы проверить работу потоков. В оригинале приложение намного сложнее. Потоки мне здесь необходимы. Поэтому, чтобы не морочить людям голову огромным количеством кода, я сделала тест, который выявляет суть проблемы.
В-третьих, хотелось бы получить ответ на поставленный вопрос относительно потоков.
...
Рейтинг: 0 / 0
Потоки и модальность JDialog
    #33332909
Jozic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yelenaКажется, проблема та же, что и в http://sql.ru/forum/actualthread.aspx?tid=226749

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

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


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

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

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

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

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

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

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

и еще, зачем там wait()? я чегото не понял...
...
Рейтинг: 0 / 0
Потоки и модальность JDialog
    #33333252
Guest_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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
Потоки и модальность JDialog
    #33333344
yelena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to Guest_2:
Да. Так правильно.
Если диалог не модальный, то без синхронизации и wait нужного результата получить не удается.
Ну а если он модальный, то действительно не нужно ни синхронизации, ни wait.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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