Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/29: Рейтинг темы: голосов - 29, средняя оценка - 4.69
 Аватар для Search74
23 / 22 / 12
Регистрация: 12.07.2014
Сообщений: 99
Записей в блоге: 1

JFrame при запуске программы форма не появляется

29.03.2016, 11:13. Показов 6180. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, начал осваивать Яву, и тут же наткнулся на первые грабли.
Создал приложение по этому пособию https://netbeans.org/kb/docs/j... ty_ru.html. Запускаю NumberAddition.jar и форма не появляется, только сообщение hello world:
Bash
1
2
java -jar NumberAddition.jar
Hello, World!
Вот код главного класса:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package numberaddition;
 
/**
 *
 * @author skripov.in
 */
public class main {
 
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]){
        System.out.println("Hello, World!");
    }
    
}


А вот код формы:
Кликните здесь для просмотра всего текста
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
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package numberaddition;
 
/**
 *
 * @author skripov.in
 */
public class NumberAdditionUI extends javax.swing.JFrame {
 
    /**
     * Creates new form NumberAdditionUI
     */
    public NumberAdditionUI() {
        initComponents();
    }
 
    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {
 
        jScrollPane1 = new javax.swing.JScrollPane();
        jTextArea1 = new javax.swing.JTextArea();
        jButton1 = new javax.swing.JButton();
 
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
 
        jTextArea1.setColumns(20);
        jTextArea1.setRows(5);
        jScrollPane1.setViewportView(jTextArea1);
 
        jButton1.setText("jButton1");
 
        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 380, Short.MAX_VALUE)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addGap(0, 0, Short.MAX_VALUE)
                        .addComponent(jButton1)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 221, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 34, Short.MAX_VALUE)
                .addComponent(jButton1)
                .addContainerGap())
        );
 
        pack();
    }// </editor-fold>                        
 
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see [url]http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html[/url] 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(NumberAdditionUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(NumberAdditionUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(NumberAdditionUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(NumberAdditionUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>
 
        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new NumberAdditionUI().setVisible(true);
            }
        });
    }
 
    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTextArea jTextArea1;
    // End of variables declaration                   
}


Видимо эту форму надо как то вызвать из главного класса, но я не знаю как. В дельфи помню делал Form1.show() и все работало. Подскажите что может быть за ерунда? Стоит Netbeans 8.0.2.
Исходники прикладываю.
NumberAddition.zip
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.03.2016, 11:13
Ответы с готовыми решениями:

При запуске появляется пустая форма
Доброго времени суток! Возникла проблема: вроде код правильный, но при запуске появляеться пустая веб-форма. using System; using...

Дочерняя форма появляется автоматически при запуске приложения
Я пыталась найти какое-то свойство, и видимо случайно что-то нажала, но теперь не могу понять что. Эта форма должна появляться как...

При запуске программы окружность не появляется
При запуске программы окружность не появляется. В чем проблема?

13
 Аватар для Search74
23 / 22 / 12
Регистрация: 12.07.2014
Сообщений: 99
Записей в блоге: 1
29.03.2016, 11:25  [ТС]
Хмм, разобрался, странно что на странице с примером не написали об этом...
Вот для потомков:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package numberaddition;
 
/**
 *
 * @author skripov.in
 */
public class main {
 
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]){
        System.out.println("Hello, World!");
        NumberAdditionUI frame = new NumberAdditionUI();
        frame.setVisible(true);
    }
}
0
 Аватар для RedPatrick
143 / 115 / 61
Регистрация: 13.01.2016
Сообщений: 305
29.03.2016, 15:20
Search74, а лучше писать не NumberAdditionUI frame = new NumberAdditionUI(), а
Java
1
2
3
4
5
6
SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new NumberAdditionUI();
            }
        });
1
 Аватар для Search74
23 / 22 / 12
Регистрация: 12.07.2014
Сообщений: 99
Записей в блоге: 1
29.03.2016, 15:49  [ТС]
RedPatrick, спасибо за помощь, я вот подумал как то коряво запускать форму в основном потоке, и надо бы создавать отельный поток.
Подскажите, как теперь в JTextArea вставить текст?
0
 Аватар для Aliara
18 / 18 / 13
Регистрация: 18.06.2015
Сообщений: 79
29.03.2016, 16:00
Можно почитать вот тут: тынц, а вот тут целый мануал по JTextArea
0
 Аватар для Search74
23 / 22 / 12
Регистрация: 12.07.2014
Сообщений: 99
Записей в блоге: 1
30.03.2016, 15:00  [ТС]
Aliara, Почитал ссылки но нужного так и не увидел.

Просто написать текст по клику на кнопку просто, для этого в классе NumberAdditionUI написал обработчик клика:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
        jTextArea1.append("Yo niggers! This is Tarantino! Ha-ha...");
    }


А мне надо вставить текст из главного класса main.
Попробовал написать так:
Кликните здесь для просмотра всего текста
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
package numberaddition;
 
import javax.swing.SwingUtilities;
 
/**
 *
 * @author skripov.in
 */
public class main {
 
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]){
        System.out.println("Hello, World!");
        NumberAdditionUI frame = new NumberAdditionUI();
        frame.setVisible(true);
        
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                NumberAdditionUI form = new NumberAdditionUI();
        form.appendText("Yoooooo!");
            }
        });
    }
}

Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package numberaddition;
 
import com.sun.org.apache.xalan.internal.xsltc.compiler.sym;
 
/**
 *
 * @author skripov.in
 */
public class NumberAdditionUI extends javax.swing.JFrame {
 
    /**
     * Creates new form NumberAdditionUI
     */
    public NumberAdditionUI() {
        initComponents();
    }
    
    public void appendText(String text) {
        jTextArea1.append(text);
    }
        ...
}

Но почему то не работает.
Кто-нить может сказать почему?
0
3 / 3 / 0
Регистрация: 22.02.2016
Сообщений: 97
30.03.2016, 15:34
Аналогичная проблема. Не знаю как правильно обратится с другого потока в поток с GUI.
1
 Аватар для Aliara
18 / 18 / 13
Регистрация: 18.06.2015
Сообщений: 79
30.03.2016, 16:11
Search74, ну, во-первых
Java
1
2
3
4
5
6
7
8
 
        NumberAdditionUI frame = new NumberAdditionUI();
        frame.setVisible(true);
 
        NumberAdditionUI form = new NumberAdditionUI();
        form.appendText("Yoooooo!");
  
}
вы объявили два фрейма. Первый фрейм вы сделали видимым, а второй - нет. При этом текст вы пытаетесь добавить на второй. Естественно на первом у вас ничего и не появится, он-то тут вообще не при чем.
Закомментируйте первый фрейм и вызовите setVisible(true) у второго, и будет вам счастье
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
   public static void main(String args[]) {
        System.out.println("Hello, World!");
//        NumberAdditionUI frame = new NumberAdditionUI();
//        frame.setVisible(true);
        
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                NumberAdditionUI form = new NumberAdditionUI();
                form.appendText("Yoooooo!");
                form.setVisible(true);
        
            }
        });
    }
1
 Аватар для Search74
23 / 22 / 12
Регистрация: 12.07.2014
Сообщений: 99
Записей в блоге: 1
31.03.2016, 08:38  [ТС]
Aliara, точно, спасибо!!! Вот что значит не внимательность.
Правильно ли я понял, что можно объявить статистическую переменную с формой в главном классе и во время первого обращения к классу этой формы (ну вернее к объекту класса формы) в отдельном потоке присвоится ссылка, и в дальнейшем к этой переменной я смогу обращаться везде в пределах главного класса? Звучит сумбурно, вот код, работающий:
Кликните здесь для просмотра всего текста
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
package numberaddition;
 
import javax.swing.SwingUtilities;
 
/**
 *
 * @author skripov.in
 */
public class main {
    private static NumberAdditionUI main_form; //наша переменная с формой
 
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]){
        System.out.println("Hello, World!");
        
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                main_form = new NumberAdditionUI(); здесь мы создаем ссылку на объект формы
                main_form.setVisible(true);
                main_form.appendText("Yoooooo!");
            }
        });
        
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                main_form.appendText("Hellow my dair friends"); //а здесь мы имеем право так обращаться?
            }
        });
    }
}
0
 Аватар для Aliara
18 / 18 / 13
Регистрация: 18.06.2015
Сообщений: 79
31.03.2016, 11:32
Search74, честно говоря, не знаю)
Что вам мешает добавить нужный вам текст в конструктор формы и не заморачиваться с потоком и отдельным классом для открытия формы?
0
 Аватар для Search74
23 / 22 / 12
Регистрация: 12.07.2014
Сообщений: 99
Записей в блоге: 1
31.03.2016, 11:39  [ТС]
Aliara, просто я хочу транслировать в эту текстовую область логи. То есть нажал кнопочку, отправился http запрос к апи, и ответ выводился тут же в jTextArea1. Динамическое добавление текста в jTextArea1.
0
 Аватар для Aliara
18 / 18 / 13
Регистрация: 18.06.2015
Сообщений: 79
31.03.2016, 11:49
Search74, хм, тогда вопрос. Сейчас вы просто пытаетесь "научиться" добавлять текст впрямую из main. А как вы будете поступать с кнопкой в этом случаем?
0
 Аватар для RedPatrick
143 / 115 / 61
Регистрация: 13.01.2016
Сообщений: 305
31.03.2016, 12:07
ImagePrototype, Search74, честно говоря, подходов несколько, но для всех задач, которые передо мной стояли, очень удобно катил один - В main запускем GUI, так как пользователь совершает все действия в EDT, все в порядке. А вычисления и другие действия делаются в классах-наследниках класса SwingWorker.
0
 Аватар для Search74
23 / 22 / 12
Регистрация: 12.07.2014
Сообщений: 99
Записей в блоге: 1
31.03.2016, 13:42  [ТС]
Aliara, я не знаю как правильно делать, но пишу прям в обработчике клика кнопки так:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class NumberAdditionUI extends javax.swing.JFrame {
    ...
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
        jTextArea1.append("Yo niggers! This is Tarantino! Ha-ha...\n");
        
        Requester requester = new Requester();
        try {
            jTextArea1.append(requester.send());
        } catch (Exception e) {
            
        }
    }
    ...
}


Ну и прикладываю пару вспомогательных классов для отправки запроса:
Кликните здесь для просмотра всего текста
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
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package numberaddition;
 
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
 
/**
 * Buid params string.<br/>
 * Example:<br/> param_name1=value&param_name2=value&..
 * @author Zhuravskiy Vitaliy 
 */
public class QueryString {
    
    private StringBuffer query;
    
    public QueryString(Object name, Object value) 
            throws UnsupportedEncodingException {
        add(name, value);
    }
    
    public QueryString() {
        query = new StringBuffer();
    }
    
    public synchronized QueryString add(Object name, Object value)
            throws UnsupportedEncodingException {
        if (!query.toString().trim().equals("")) query.append("&");
        query.append(URLEncoder.encode(name.toString(), "UTF-8"));
        query.append("=");
        query.append(URLEncoder.encode(value.toString(), "UTF-8"));
        return this;
    }
    
    public String toString() {
        return query.toString();
    }
}


Кликните здесь для просмотра всего текста
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
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package numberaddition;
 
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
 
/**
 *
 * @author skripov.in
 */
public class Requester {
    /**
     * Метод читает из потока данные и преобразует в строку
     * @param in - входной поток
     * @param encoding - кодировка данных
     * @return - данные в виде строки
     */
    private String readStreamToString(InputStream in, String encoding) throws IOException {
        StringBuffer b = new StringBuffer();
        InputStreamReader r = new InputStreamReader(in, encoding);
        int c;
        while ((c = r.read()) != -1) {
            b.append((char)c);
        }
        return b.toString();
    }
    
    public void postExample(String url, QueryString query) throws IOException {
        //устанавливаем соединение
        URLConnection conn = new URL(url).openConnection();
        //мы будем писать POST данные в out stream
        conn.setDoOutput(true);
        
        OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream(), "ASCII");
        out.write(query.toString());
        out.write("\r\n");
        out.flush();
        out.close();
        
        //читаем то, что отдал нам сервер
        String html = readStreamToString(conn.getInputStream(), "UTF-8");
        
        //выводим информацию в консоль
        System.out.println("URL:" + url);
        System.out.println("Html:\n" + html);
    }
    
    public String getExample(String url, QueryString query) throws IOException {
        //устанавливаем соединение
        URLConnection conn = new URL(url + "?" + query).openConnection();
        //заполним header request парамеры, можно и не заполнять
        conn.setRequestProperty("Referer", "http://google.com/http.example.html");
        conn.setRequestProperty("Cookie", "a=1");
        //можно установить и другие парамеры, такие как User-Agent
        
        //читаем то, что отдал нам сервер
        String html = readStreamToString(conn.getInputStream(), "UTF-8");
        
        //выводим информацию в консоль
//      System.out.println("URL:" + url);
//      System.out.println("Html:\n" + html);
        return html;
    }
    
    public String send() throws IOException {
        QueryString q = new QueryString()
            .add("login","admin")
            .add("password", "pass");
 
        Requester e = new Requester();
        return e.getExample("http://juravskiy.ru/", q);
    }
    
    public static void main(String[] args) throws IOException {
 
        QueryString q = new QueryString()
            .add("login","admin")
            .add("password", "pass");
        
        Requester e = new Requester();
        e.getExample("http://juravskiy.ru/", q);
        e.postExample("http://juravskiy.ru/", q);
    }
}


При этом пока ответ не прилетит, у кнопки зажимается нажатие. Вот думаю что можно придумать, может попробовать как советует RedPatrick.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.03.2016, 13:42
Помогаю со студенческими работами здесь

Появляется картинка при запуске программы
Всем привет! Как сделать, чтобы при запуске программы, появилось сначала изображение (в течении 3 секунд), по истечению 3 секунд, оно...

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

Почему при запуске программы в программе появляется консоль?
Код программы, которая запускает саму себя через некоторое время: {$apptype windows} uses GraphABC; begin ...

Консоль появляется только на мгновение при запуске программы
Консоль появляется только на мгновение при запуске программы. Пробовал Eclipse, Netbeans . ОС Windows 8.1 Industry Pro x64, JDK 7. Помогите...

При запуске игры появляется окно - Прекращение работы программы
Почему кода я запускаю игру на Windows 7 у меня вылезает окно Прекращение работы програмы Windows может провести поиск способа устранения...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru