Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
11 / 11 / 0
Регистрация: 13.10.2012
Сообщений: 163

Многопоточность

29.06.2013, 00:54. Показов 1335. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Если не ошибаюсь, данная вещь, которая описана ниже, называется многопоточностью.
Кликните здесь для просмотра всего текста
Чтобы в полной мере шарить в java надо затратить довольно-таки много времени, мне же дается 2 недели на все про все, и просто невозможно за этот короткий срок хорошо освоить язык.

Итак, осталось реализовать финальную стадию проекта, суть такая: Запускается приложение, пользователь вводит размерность доски, открывается новое окно где появляется та самая доска, но проблема в том, что запускаются сразу два окна - первое нормально, как и должно выглядеть, а вот второе - не очень.

Должно быть:

А затем:


Но вот, что получается на самом деле:



А вот, мой быдло-код:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 public static void main(String[] args) { 
aWindow win=new aWindow(); //тут создается окно где вводится размерность доски
     int N;
     N=win.getN(); 
      
    Visualisation GP = new Visualisation(N);  //тут создается шахматная доска
    final Frame aFrame = new Frame("Шахматная доска"); 
    aFrame.addWindowListener(new WindowAdapter() 
    {
        public void windowClosing(WindowEvent e)
        {
            aFrame.dispose();
        }
    });
    aFrame.add(GP); 
    aFrame.pack(); 
    aFrame.setVisible(true);
    
    
    aFrame.setResizable( false ); 
    aFrame.setLocationRelativeTo( null );   
   
  }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.06.2013, 00:54
Ответы с готовыми решениями:

Многопоточность
Нужно сделать 5 потоков по 10 сообщений. И чтоб потоки выводились в обратном порядке... Вот только я понятия не имею, как это сделать....

Многопоточность
Здравствуйте! Есть код public static void main(String args) throws InterruptedException { Thread thread = new...

Многопоточность
Здравствуйте! Подскажите, где почитать о концепции применения многопоточности? Я имею ввиду зачем и когда многопоточность нужна, чем без...

10
 Аватар для verylazy
462 / 462 / 71
Регистрация: 26.02.2013
Сообщений: 1,263
29.06.2013, 10:43
навскидку, я бы закомментировал aFrame.pack(); и смотрел дальше
0
11 / 11 / 0
Регистрация: 13.10.2012
Сообщений: 163
29.06.2013, 11:43  [ТС]
Цитата Сообщение от verylazy Посмотреть сообщение
навскидку, я бы закомментировал aFrame.pack(); и смотрел дальше
Нет, к сожалению не сработало
Дело в том, что тип aWindow представлен следующим классом:
Java
1
class aWindow implements ActionListener {...}
а тип Visualisation - так:
Java
1
public class Visualisation extends Canvas {...}
И такое чувство, что функция paint(Graphics g) запускается раньше, чем создается объект:
Java
1
aWindow win=new aWindow();
А только после этого создается следующий объект:
Java
1
Visualisation GP = new Visualisation(N);
И по идеи должна вызываться функция paint().
0
15 / 15 / 6
Регистрация: 10.03.2013
Сообщений: 54
29.06.2013, 11:45
Многопоточность тут не причем, скорее всего у вас не установлены размеры внутренних компонент окна с доской, либо установлены не правильно. Приведите код окна с доской
0
11 / 11 / 0
Регистрация: 13.10.2012
Сообщений: 163
29.06.2013, 11:58  [ТС]
Цитата Сообщение от Humble_Beck Посмотреть сообщение
Многопоточность тут не причем, скорее всего у вас не установлены размеры внутренних компонент окна с доской, либо установлены не правильно. Приведите код окна с доской
Ну вот:

Java
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
import java.awt.*;   
 
import java.awt.event.WindowEvent.*;
import java.awt.event.*;
import java.awt.font.*; 
import java.awt.geom.*;
import java.util.Scanner;
 
import javax.swing.*;
 
import java.lang.Thread.*;
 
public class Visualisation extends Canvas 
{ /*расширение класса Canvas */
    //выжные переменные
    private int  D_size;
    private boolean flag_parity; // флаг для контроля размера
    private boolean flag_some;
    private int mass; // масштаб
    
  public Visualisation(int N) {   
      this.D_size=N;
     if(this.D_size<6) setSize(this.D_size*100, this.D_size*100);
     else setSize(600, 600);
     if(D_size<6) mass=100;
     else mass=600/this.D_size;
 
  } 
  
  
  public static void main(String[] args) { 
    
     aWindow win=new aWindow();
     int N;
     N=win.getN(); //получение размерности доски
      
    Visualisation GP = new Visualisation(N); 
    final Frame aFrame = new Frame("Шахматная доска"); // создали окно
    aFrame.addWindowListener(new WindowAdapter() // на выход по кнопке
    {
        public void windowClosing(WindowEvent e)
        {
            aFrame.dispose();
        }
    });
    aFrame.add(GP); // добавили размер
    //aFrame.pack(); 
    aFrame.setVisible(true);
    
    
    aFrame.setResizable( false ); //@
    aFrame.setLocationRelativeTo( null );   //@
   
  } 
 
 
  
  
  public void paint(Graphics g) 
  { 
        queen obj=new queen(this.D_size); //алгоритм поиска расстановок
        Graphics2D g2=(Graphics2D) g;
        desk Chess=new desk(g2,this.D_size);
        obj.layout(0, g2, this.mass);
        obj.total();
    
  }
  
  
  
  
}
  class aWindow implements ActionListener 
  {
    JLabel jlab;
    JTextField jtf;
    JTextArea jta;
    
    int intN;
    String strN;
    
    aWindow()
    {
        //создание нового контейнера JFrame
        JFrame jfrm=new JFrame("UnQueen");
        
        //установка диспечера компоновки FlowLayout
        jfrm.getContentPane().setLayout(new FlowLayout());
        
        //установка исходного размера фрейма
        jfrm.setSize(300, 400);
        
        //завершение программы при закрытии пользовательского окна
        jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        
        jfrm.setResizable( false );
        jfrm.setLocationRelativeTo( null );
        jfrm.setVisible(true);
        
        
        //Создание текста метки
        jlab=new JLabel("Введите размерность доски [0<N<33]: ");
                
        //добавление метки к фрейму
        jfrm.getContentPane().add(jlab);
        
        //создание поля редактирования отображающего до 5 символов
        jtf=new JTextField(5);
        
        //связывание с полем редактирования обраб. событий действия
        jtf.addActionListener(this);
        
        //установка шрифтов
        jlab.setFont(new Font("", Font.BOLD, 14));
        jtf.setFont(new Font("", Font.PLAIN, 17));
        
        
        //включение поля редактирования  состав панели
        jfrm.getContentPane().add(jtf);
        
        
        //Создание кнопки
        JButton jbtn=new JButton("Запустить");
        
        //Связывание с кнопками обработчиков событий
        jbtn.addActionListener(this);
        
        //Включение кнопки в состав панели содержимого
        jfrm.getContentPane().add(jbtn);
        
        
        //создание поля редактирования
        jta=new JTextArea();
        
        //установка режима переноса по границе слова
        jta.setLineWrap(true);
        jta.setWrapStyleWord(true);
        
        //включение текстовой области в панель с прокруткой
        JScrollPane jscrlp=new JScrollPane(jta);
        jscrlp.setPreferredSize(new Dimension(280, 298));
        
        //связывание обработчика событий текстового
        //курсора с компонентом. Данный обработчик
        //отображает счетчик слов.
        /*jta.addCaretListener(new CaretListener()
        {
            
        })*/
        
        //включение компонентов состав панели содержимого
        jfrm.getContentPane().add(jscrlp);
        
        //отображение фрейма
        jfrm.setVisible(true);          
        
        
    }
    
  //поддержка событий связанных с кнопкой
    
        public void actionPerformed(ActionEvent ae)
        {
            
            if(ae.getActionCommand().equals("Запустить"))
            {
                strN=jtf.getText();
                intN=Integer.parseInt(strN);
                jta.setText("Поехали!");
            }
            
        }
        
        public int getN()
        {
            return intN;
        }
        
  }
А вот прорисовка:
Java
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
// desk - класс, необходимый для отрисовки шахматной доски
import java.awt.*; 
import java.awt.event.*;
import java.awt.geom.Rectangle2D;
 
public class desk extends Canvas {
    private int  Desk_size;
    private boolean flag_parity; // флаг для контроля размера
    private int mass;
    public desk(Graphics2D g2, int d_size) 
      {
            this.Desk_size = d_size;
            if(Desk_size<6) this.flag_parity=false;
            else this.flag_parity=true;
            int checker=0;
            
            if(this.flag_parity==false) mass=100;
            else mass=600/this.Desk_size;
        
            
            for (int i = 0; i < this.Desk_size ; i += 1)
            { 
              for (int j = 0; j < this.Desk_size; j += 1) 
              { 
                   
                   if((j+1)%2==1 )
                   {
                       if((i+1)%2==1) g2.setColor(new Color(175,121,47));
                       else g2.setColor(new Color(250,238,221)); 
                   }
                   else 
                   {
                       if((i+1)%2==0) g2.setColor(new Color(175,121,47));
                       else g2.setColor(new Color(250,238,221));
                   } 
                  
                   Queen_place QQ=new Queen_place(g2, j*mass, i*mass,mass); // создаем клетку
                 } 
            } 
            
      }
    
     
}
0
15 / 15 / 6
Регистрация: 10.03.2013
Сообщений: 54
29.06.2013, 12:38
Попробуйте выставить размер через setPreferredSize, я все таки склоняюсь к тому что проблема в размерах компонент!
0
11 / 11 / 0
Регистрация: 13.10.2012
Сообщений: 163
29.06.2013, 12:47  [ТС]
Цитата Сообщение от Humble_Beck Посмотреть сообщение
Попробуйте выставить размер через setPreferredSize, я все таки склоняюсь к тому что проблема в размерах компонент!
Я полагают, Вы имели ввиду это:
Java
1
2
3
4
5
this.D_size=N;
         if(this.D_size<6) setPreferredSize(new Dimension(this.D_size*100, this.D_size*100));
         else setPreferredSize(new Dimension(600, 600));
         if(D_size<6) mass=100;
         else mass=600/this.D_size;
К сожалению, не помогло
0
 Аватар для verylazy
462 / 462 / 71
Регистрация: 26.02.2013
Сообщений: 1,263
29.06.2013, 13:12
Я все еще не понимаю зачем там pack()
Если после этой строки поставить что то типа aFrame.setBounds(0, 0, 100, 100);
то размер окошка будет другой
0
11 / 11 / 0
Регистрация: 13.10.2012
Сообщений: 163
29.06.2013, 13:19  [ТС]
Цитата Сообщение от verylazy Посмотреть сообщение
Я все еще не понимаю зачем там pack()
Если после этой строки поставить что то типа aFrame.setBounds(0, 0, 100, 100);
то размер окошка будет другой
Да я потом обратно раскомментил.
Теперь опять закомментил. Да и вправду окно изменилось, но почему же доска не появилась?
Java
1
2
//aFrame.pack(); 
    aFrame.setBounds(0, 0, 600, 600);
0
 Аватар для verylazy
462 / 462 / 71
Регистрация: 26.02.2013
Сообщений: 1,263
29.06.2013, 13:47
а она должна появиться? я просто кода не вижу, который бы рисовал клетки (может плохо искал, я учусь тоже)
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
29.06.2013, 16:47
Цитата Сообщение от yol Посмотреть сообщение
Да и вправду окно изменилось, но почему же доска не появилась?
вам неплохо бы определиться на основе чего доску делать, так как можно её рисовать на основе таблицы, или просто на гридлайоуте накидать чернобелых рисунков, или один большой рисунок генерить на BuffredImage а потом его отображать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.06.2013, 16:47
Помогаю со студенческими работами здесь

Многопоточность
Вот изучаю Java и застопорился на использовании методов wait() и notify() в многопоточности! Может кто-нибудь на примере рассказать как они...

многопоточность детально!
Уважаемые!!!! на базовом уровне ознакомился с многопоточностью в Java (потоки, ключевые слова, синхронизация, понятие монитора) хотелось бы...

многопоточность и запись в файл
помогите справится с задачей, необходимо прочитывать побайтно из файла текст в ASCII кодировке в одном потоке, преобразовывать его...

Многопоточность
У меня есть класс в нем куча функций мне нужно что б эти функции работали одновременно если так можно киньте набросок. Работаю в ДжаваФХ...

Многопоточность
Данный код должен в теории выдавать произвольное число (в определенном интервале). У меня четко каждый раз 200 000. В чем ошибка? ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru