С Новым годом! Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
17 / 22 / 6
Регистрация: 16.10.2013
Сообщений: 316

Как запустить поток?

16.10.2013, 16:52. Показов 1261. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Начал учить джава уже как пару недель. Хочу разобраться с потоками но пока ка то туго.
Вот набросал генератор луна
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
    
 
    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.ObjectInputStream.GetField;
     
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;
    import javax.swing.JTextField;
    import javax.swing.SwingUtilities;
    import javax.swing.border.TitledBorder;
     
    public class Generator implements ActionListener, Runnable {
            private static int[] _ccNumber;
            private static JTextField CCin;
            private static JTextField NumOfCCin;
            private static JTextArea resultText;
            private JFrame frm;
            private JButton btngen;
            private static char[] CCcharArr;
     
            /**
             * @wbp.parser.entryPoint
             */
            public void run() {
                    initComponents();
                    initEvents();
                    frm.setVisible(true);
            }
     
            public void initComponents() {
                    frm = new JFrame();
                    frm.setResizable(false);
                    frm.setTitle("Lunah Generator");
                    frm.setSize(new Dimension(330, 375));
                    frm.getContentPane().setLayout(null);
                    JPanel configpanel = new JPanel();
                    configpanel.setBorder(new TitledBorder(null, "Input up to 15 numbers",
                                    TitledBorder.LEADING, TitledBorder.TOP, null, null));
                    configpanel.setBounds(10, 11, 307, 154);
                    frm.getContentPane().add(configpanel);
                    configpanel.setLayout(null);
     
                    JLabel lblNewLabel = new JLabel("Input up to 15 nums");
                    lblNewLabel.setBounds(10, 62, 172, 14);
                    configpanel.add(lblNewLabel);
     
                    JLabel label = new JLabel("Input nums of CC generate");
                    label.setBounds(10, 31, 172, 14);
                    configpanel.add(label);
     
                    CCin = new JTextField();
                    CCin.setBounds(163, 28, 133, 20);
                    configpanel.add(CCin);
     
                    NumOfCCin = new JTextField();
                    NumOfCCin.setColumns(10);
                    NumOfCCin.setBounds(210, 56, 86, 20);
                    configpanel.add(NumOfCCin);
     
                    btngen = new JButton("generate");
                    btngen.setBounds(10, 87, 89, 23);
                    configpanel.add(btngen);
     
                    JPanel textpanel = new JPanel();
                    textpanel.setBorder(new TitledBorder(null, "Valid CC",
                                    TitledBorder.LEADING, TitledBorder.TOP, null, null));
                    textpanel.setBounds(10, 176, 307, 159);
                    frm.getContentPane().add(textpanel);
                    textpanel.setLayout(new BorderLayout(0, 0));
     
                    resultText = new JTextArea();
                    resultText.setRows(8);
                    resultText.setLineWrap(true);
                    JScrollPane scroll = new JScrollPane(resultText);
                    textpanel.add(scroll);
     
            }
     
            public void initEvents() {
                    frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    btngen.addActionListener(this);
            }
     
            public void actionPerformed(ActionEvent e) {
                    // Код, который нужно выполнить при нажатии
                    convertToArray();
                    operations();
            }
     
            public void convertToArray() {
                    CCcharArr = CCin.getText().toCharArray();// convert string to char array
     
                    for (int j = 0; j < CCcharArr.length; j++) {
                            int y = Integer.parseInt(String.valueOf(CCcharArr[j]));// convert
                                                                                                                                            // char to
                                                                                                                                            // int
                            _ccNumber[j] = y; // write in int array
                    }
            }
     
            public static void operations() {
     
                    // заполняем пустіе ячейки массива рандомно до 15го числа
                    for (int i = CCcharArr.length; i < _ccNumber.length - 1; i++) {
                            _ccNumber[i] = (int) (Math.random() * 10);// write random to int
                                                                                                                    // array from min to max
                    }
     
                    // начало вычисление контрольного числа
                    int[] validcc = _ccNumber.clone();
                    int temp = 0;
                    int temp2 = 0;
                    for (int i = 0; i < validcc.length; i++) {
                            temp = validcc[i] * 2;
                            if (i % 2 == 0) {
                                    if (temp > 9) {
                                            temp = temp - 9;
                                            validcc[i] = temp;
                                    } else {
                                            validcc[i] = temp;
                                    }
                            }
                    }
                    for (int a = 0; a < validcc.length; a++) {
                            temp2 = temp2 + validcc[a];
                    }
                    if (temp2 % 10 != 0) {
                            _ccNumber[15] = (int) (10 - temp2 % 10);// записываем контрольное
                                                                                                            // число в 16 ячейку массива
                    }
                    // конец вычисления контрольного числа
     
                    // выводим все сгенерированое в текстерей
                    for (int i = 1; i < Integer.parseInt(NumOfCCin.getText()) + 1; i++) {//цікл віполняем н раз NumOfCCin
                            resultText.append("� " + i + "  ");
                            for (int j = 0; j < _ccNumber.length; j++) {//дописываем в текстареа
                                    if (j == _ccNumber.length - 1) {
                                            resultText.append(_ccNumber[j] + "\r\n");
                                    } else {
                                            resultText.append("" + _ccNumber[j]);
                                    }
     
                            }
                    }
     
            }
     
            public static void main(String[] args) {
                    Generator gen = new Generator();
                    SwingUtilities.invokeLater(gen); // поехали
            }
    }
подскажите почему не работает?
Еще буду благодарен если раскритикуете єтот УГкод и укажите как надо делать правильно. Писал по инструкциям из книжки

 Комментарий модератора 
5.19 Запрещено размещать ссылки на задания и коды программ, расположенные на других сайтах. Вопросы и коды программ должны размещаться на форуме.
Правила форума
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.10.2013, 16:52
Ответы с готовыми решениями:

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

Как запустить новый поток?
мне надо запустить новый поток как обычно в классе родителя пишу:private Class1 cl; затем после нажатия кнопки пишу : cl.state +=...

Как запустить асинхронный поток?
Знаю, что влез в невылазные дебри, но нужно, дабы не висла форма у программы. У меня есть функция, ее нужно запустить параллельно...

5
 Аватар для Gibby
154 / 154 / 10
Регистрация: 16.10.2012
Сообщений: 354
Записей в блоге: 1
16.10.2013, 17:26
Ошибка номер 1: весь код в одном классе. Там GUI, там main, там всё. Так в Java никто не делает. Классы делают настолько маленькими, насколько это возможно.

Ошибка номер 2: сокращение названий переменных. Вы вспомните через год что такое _ccNumber? А что такое frm? Вам трудно написать frame? Это всего на 2 символа больше. А понятность увеличилась несказанно. То же про btngen. Это вы сейчас знаете, что это buttonGenerate, а не byteAndGenerate, byteTangens и т.д.

Ошибки конкретно по коду:
1)
Java
1
_ccNumber[j] = y; // write in int array
_ссNumber не инициализирован -> NullPointerException
2) TextField не очищается между нажатиями кнопки.
1
17 / 22 / 6
Регистрация: 16.10.2013
Сообщений: 316
16.10.2013, 17:58  [ТС]
Цитата Сообщение от Gibby Посмотреть сообщение
Ошибка номер 1: весь код в одном классе. Там GUI, там main, там всё. Так в Java никто не делает. Классы делают настолько маленькими, насколько это возможно.

Ошибка номер 2: сокращение названий переменных. Вы вспомните через год что такое _ccNumber? А что такое frm? Вам трудно написать frame? Это всего на 2 символа больше. А понятность увеличилась несказанно. То же про btngen. Это вы сейчас знаете, что это buttonGenerate, а не byteAndGenerate, byteTangens и т.д.

Ошибки конкретно по коду:
1)
Java
1
_ccNumber[j] = y; // write in int array
_ссNumber не инициализирован -> NullPointerException
2) TextField не очищается между нажатиями кнопки.
спасибо за обширный ответ!
Иду вносить правки.
А на счет того, что все на куче, еще не знаю как все правильно разносить по классам...пока таких инструкций не нашел. Изначально было 3 класса, но запутался создавая экземпляры и вызывая методы. Сделал проще - один класс со всеми методами
0
 Аватар для Gibby
154 / 154 / 10
Регистрация: 16.10.2012
Сообщений: 354
Записей в блоге: 1
16.10.2013, 18:04
Самое простое - вынесите GUI в один класс, а реализацию в другой класс.

Очень тяжело воспринимать, когда все в куче.
1
17 / 22 / 6
Регистрация: 16.10.2013
Сообщений: 316
16.10.2013, 21:26  [ТС]
Цитата Сообщение от Gibby Посмотреть сообщение
Самое простое - вынесите GUI в один класс, а реализацию в другой класс.

Очень тяжело воспринимать, когда все в куче.
то есть создаю
мейн класс
public class Generator(){
тут только запускаю порграмму и создаю экземпляри нижних класов и далее вызываю методы
}

class newclassGui(){
public void initComponents()
public void initEvents()
public void actionPerformed(ActionEvent e)
}

class newclsaaCalcs(){
public void convertToArray()
public static void operations()
}

пока я только такую картину представить себе могу.
0
78 / 78 / 9
Регистрация: 28.10.2011
Сообщений: 219
17.10.2013, 18:26
Цитата Сообщение от warrax Посмотреть сообщение
class newclassGui
Имена классов начинаються большой буквы.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.10.2013, 18:26
Помогаю со студенческими работами здесь

Как запустить поток из таймера?
не получается запустить потоки из таймера, при создании потока из кнопки все работает procedure TForm1.Button2Click(Sender: TObject); ...

Как запустить вторичный поток
Доброго дня, Помогите разобраться что не так, как это победить: срабатывает исключение InvalidOperationException в строчке...

Как запустить отдельный поток
Как запустить часть кода в отдельном потоке. Пробовал так: public void func (){ this.Invoke((MethodInvoker)delegate(){ ...

Как запустить поток в консоли?
Просьба не пинать ногами, в структуре программы ориентируюсь еще очень слабо. У меня примерно так: main ZZZ Тут в цикле...

Как создать и запустить поток в WPF
Раньше программируя в Forms я делал так Sub Button_Click ' при нажатии на кнопку dim Potok as new thread(sub () Print_I) ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru