Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 10.05.2019
Сообщений: 10

Почему в GUI нельзя использовать объект в main?

11.05.2019, 05:26. Показов 1737. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Делаю в конструкторе NetBeans,
и проблема в том, что я не знаю, как использовать методы, ибо,
если объявить объект ( 1 скриншот),
то в main компилятор говорит,
что его нельзя использовать, ссылаясь на " non-static variable Jf cannot be referenced from a static context".
И соответственно не получается вызвать метод change5() . (2 скриншот)
Если же сделаю его статическим, то ошибку будет вызывать уже, находящийся в нем, jButton, ибо он не является
статическим. (3 скриншот)
Спасите, скажите, как нужно сделать?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.05.2019, 05:26
Ответы с готовыми решениями:

Почему в int main() нельзя вернуть значение больше 255?
Другие любые функции int могут вернуть число больше 255, но не в случае main(), по крайней мере в CodeBlocks. Стало интересно, почему же...

Почему break нельзя использовать в if?
почему break нельзя использовать в if вот код if(f.eof()==1) { break; } про break MVS говорит что ОПЕРАТОР break...

Почему структуру нельзя использовать в классе?
#include <iostream> class editor_form { struct prop { int y; }; prop addLineAtHeight(int y); public:

12
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
11.05.2019, 08:08
Farafa, ты бы код привел вместо скриншотов...
Если у тебя инициализируются компоненты и вызывается setVisible прямо в конструкторе класса JF, то в мэйне достаточно просто создать объект твоего класса. JF jf = new JF();
И уж потом вызывать его методы.
0
0 / 0 / 0
Регистрация: 10.05.2019
Сообщений: 10
11.05.2019, 16:32  [ТС]
Я не могу привести код, так как там слишком много строчек.
"в мэйне достаточно просто создать объект твоего класса. JF jf = new JF();"
Согласен, но дело в том, что у меня в событиях на кнопках
должны вызываться методы, которые есть в классе.
Если я создам объект в начале класса JF jf = new JF(); ,
то, при вызове через него методов в событиях кнопок ,
выдаст ошибку Exception in thread "main" java.lang.StackOverflowError, а
дальше указывать на место создания объекта.
Я могу создавать в событиях кнопки каждый раз новый объект,
он действительно будет выполнять метод, но при этом открывать новое
окно
И в этом проблема: каждый новый объект создает свое окно, но мне нужно вносить изменения в один и тот же
0
0 / 0 / 0
Регистрация: 10.05.2019
Сообщений: 10
11.05.2019, 16:50  [ТС]
Вот, я вырезал ту часть кода, о которой написал
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
package g;
 
 
public class JF extends javax.swing.JFrame {
 
   JF jf = new JF();
    
    public JF() {
        initComponents();
    }
    
void change5( int a){
       
     switch (a) {
case 1:{
    jLabel1.setText(jLabel1.getText()+" 1 ");
    break;
}
    
case 2:
{
    jLabel1.setText(jLabel1.getText()+" 1 ");
}
    
case 3:
{
    jLabel1.setText(jLabel1.getText()+" 1 ");
}
    
case 4:
{
    jLabel1.setText(jLabel1.getText()+" 1 ");
}
    
case 5:
{
     jLabel1.setText(jLabel1.getText()+" 1 ");
}
   
     }}
   
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {
 
        jButton1 = new javax.swing.JButton();
        jLabel1 = new javax.swing.JLabel();
 
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
 
        jButton1.setText("jButton1");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });
 
        jLabel1.setText("jLabel1");
 
        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(46, 46, 46)
                        .addComponent(jButton1))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(36, 36, 36)
                        .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 106, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap(93, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(39, 39, 39)
                .addComponent(jButton1)
                .addGap(18, 18, 18)
                .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 49, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(29, Short.MAX_VALUE))
        );
 
        pack();
    }// </editor-fold>                        
 
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        jf.change5(3);
    }                                        
 
  
    public static void main(String args[]) {
       
        
        
        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(JF.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(JF.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(JF.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(JF.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>
 
       
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new JF().setVisible(true);
            }
        });
    }
 
    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    // End of variables declaration                   
}
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
11.05.2019, 16:51
Farafa, омг. Объект класса JF нужно создавать НЕ В КЛАССЕ JF
0
0 / 0 / 0
Регистрация: 10.05.2019
Сообщений: 10
11.05.2019, 19:24  [ТС]
А где? Каким образом вызывать методы в событиях?
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
11.05.2019, 19:50
Твой класс JF - наследник JFrame. Т.е., по сути, класс-окно. В нем происходит и отрисовка окна с компонентами, и отслеживание/реакция на события.
Так создай экземпляр этого класса в другом классе!!! Убери отсюда public static void main() !!!

Добавлено через 31 секунду
Java
1
2
3
4
5
6
7
8
9
package ru.ismoke;
 
public class Cyber {
 
    public static void main(String[] args) {
        JF jf = new JF();
        jf.go();
    }
}
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 ru.ismoke;
 
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
public class JF extends JFrame implements ActionListener {
    private JButton button = new JButton("click");
 
    public void go(){
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setBounds(200,200,200,100);
        setLayout(new BorderLayout());
        JPanel panel = new JPanel();
        button.setBounds(10,10,50,20);
        button.addActionListener(this);
        panel.add(button);
        add(panel);
        setVisible(true);
    }
 
    @Override
    public void actionPerformed(ActionEvent e) {
        JOptionPane.showMessageDialog(this, "CLICKED!!!");
    }
}
1
0 / 0 / 0
Регистрация: 10.05.2019
Сообщений: 10
11.05.2019, 21:51  [ТС]
Нет проблем, я сделал соседний класс, в котором создал вызов и метод.
Вот код
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class T {
 private javax.swing.JLabel jLabel1;
 
    public static void main(String[] args) {
         
       System.out.println("htth");
         JF jf = new JF();
       
      jf.setVisible(true);
      T t = new T ();
      t.change5();
      
    }
    void change5( ){
       
   jLabel1.setText("hth");
 
     }
    
}
Выдает ошибку
Exception in thread "main" java.lang.NullPointerException
at t.T.change5(T.java:20)
at t.T.main(T.java:15)
0
Кандёхаем веселее!
 Аватар для MLPMan
296 / 330 / 76
Регистрация: 02.10.2012
Сообщений: 2,175
11.05.2019, 21:59
Farafa, объект jLabel1 тут не инициализирован, он равен null. Также предполагаю, что эта метка (jLabel1) будет отображаться на форме, тогда её объявление и манипуляции с ней логично перенести в класс JF, во избежание путаницы.
1
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
11.05.2019, 21:59
Лучший ответ Сообщение было отмечено Farafa как решение

Решение

Farafa, рано ты в гуй полез, ох рано...
Ты задекларировал поле класса типа JLabel, так?
Потом пытаешься у него вызвать метод setText(), так?
А инициализировать поле кто будет???
Java
1
2
public class T {
 private JLabel jLabel1 = new JLabel();
0
0 / 0 / 0
Регистрация: 10.05.2019
Сообщений: 10
12.05.2019, 00:07  [ТС]
Ахах, так Вы меня выгнали в соседний класс(((
Я и так вижу, что он выдает NullPointerException.
Умоляю, ради всего доброго в этом мире, не мучайте: покажите, как вызвать из события метод.
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
12.05.2019, 00:12
Farafa, ты что, тролль? Или прикидываешься?
Я тебе написал пример. Метод actionPerformed вызывается при наступлении события. Вызывай внутри хоть 100500 методов.
0
0 / 0 / 0
Регистрация: 10.05.2019
Сообщений: 10
12.05.2019, 00:18  [ТС]
Ойк. У мя получилось. Большое спасибо за терпение
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.05.2019, 00:18
Помогаю со студенческими работами здесь

Почему нельзя использовать метод ReadAllLines?
static int FoundConst(string fileAddress, string cs) { int count = 0; ...

Почему нельзя использовать глобальные переменные
Здравствуйте, собственно вышел сиз данным вопросом в гугл и на стаке нашел такой ответ: 1)Глобальные переменные в большинстве случаев...

Почему допустимо создавать объект по другому объекту, но нельзя присваивать уже созданный объект, другому созданному объекту?
Это можно : Array a(10); a.set(0,5); Array b(a); А это нельзя : Array a(10); Array b(20); a = b;

Почему нельзя в функциях использовать типизированные указатели ?
Почему нельзя в функциях использовать типизированные указатели ? Напр почему так нельзя ? {$R *.dfm} function (p:^integer):integer;

Почему в сокращённой записи if нельзя использовать return
Здравствуйте. Решил воспользоваться сокращённой записью if. Например: int temp() { int a; a &gt; 5? return 5: return 2; ...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
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. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru