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

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

16.10.2013, 16:52. Показов 1277. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru