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

Диалоговое окно в случае ошибки

11.09.2017, 17:59. Показов 4791. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть код запроса в удаленную БД. Как сделать так, чтобы в случае любой ошибки в этом участке кода появлялось окно с ошибкой, или хотя бы со стандартной фразой любого содержания? Чтобы пользователь понял, что что-то не так.Кроме того, При нажатии на кнопку, выполняется этот класс и кнопка меняет свое лого. Класс и кнопка связаны ActionListener. Можно ли сделать так, чтобы в случае ошибки кнопка не менялась на другу.
сам класс:
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
public static class mysql implements ActionListener{
        ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
        ScheduledFuture<?> future = executor.scheduleWithFixedDelay(() -> actionPerformed(null), 1, 1, TimeUnit.MINUTES);
 
        private static String url = "jdbc:mysql://";
        private static String user = "";
        private static String password = "";
 
 
 
        private static Connection con;
        private static Statement stmt;
 
        public void actionPerformed(ActionEvent e){
 
 
            try {
            ownip = Getip.getip();
            gettime = Gettime.getip();
                    } catch (IOException e1) {
 
            e1.printStackTrace();
            return;
        }
 
        StringBuilder lp = List.list();
        try {
 
 
            con = DriverManager.getConnection(url, user, password);
            stmt = con.createStatement();
            String sql =  "zapros";
 
            PreparedStatement preparedStatement = con.prepareStatement(sql);
 
            preparedStatement.executeUpdate();
 
        } catch (SQLException sqlEx) {
            sqlEx.printStackTrace();
        } 
 
    }
 
}
Смена лого при нажатии:
Java
1
2
3
4
5
6
7
8
Start.addItemListener(new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent e) {
                String icon = (Start.isSelected()) ? "/PFP/button_off.png" : "/PFP/button_on.png";
                Start.setIcon(new ImageIcon(gui.class.getResource(icon)));
 
            }
        });
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.09.2017, 17:59
Ответы с готовыми решениями:

Из окна приложения в случае ошибки надо вызвать окно с сообщением о ней
У меня есть два окна - одно с основной программой, другое с сообщением об ошибке ввода данных. Как проще сделать так что при определённых...

Диалоговое окно
Доброе время суток! подскажите как совместить этот код .RowSource = &quot;=A2:D2&quot; с этим Private Sub UserForm_Initialize() With...

Диалоговое окно Qt
Не могу никак разобраться с появлением диалогового окна в главном окне. Помогите, пожалуйста, разобраться. Вот сам код: createdialog.h...

13
 Аватар для Kukstyler
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
11.09.2017, 21:41
Лучший ответ Сообщение было отмечено dropych как решение

Решение

dropych, думаю, что-то в этом роде:

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
        JFrame topFrame = (JFrame)SwingUtilities.getWindowAncestor(this);
        
        public void actionPerformed(ActionEvent e){ 
            try {
                ownip = Getip.getip();
                gettime = Gettime.getip();
            } 
            catch (IOException e1) { 
                e1.printStackTrace();
                
                JOptionPane.showMessageDialog(topFrame, "Error getIp");
            return;
        }
 
        StringBuilder lp = List.list();
        try { 
            con = DriverManager.getConnection(url, user, password);
            stmt = con.createStatement();
            String sql =  "zapros";
 
            PreparedStatement preparedStatement = con.prepareStatement(sql);
 
            preparedStatement.executeUpdate();
            
            itemStateChanged();
 
        } 
        catch (SQLException sqlEx) {
            sqlEx.printStackTrace();
            
            JOptionPane.showMessageDialog(topFrame, "Error SQL");
        } 
        
       ...
        
        
        
        public void itemStateChanged() {
            String icon = (Start.isSelected()) ? "/PFP/button_off.png" : "/PFP/button_on.png";
            Start.setIcon(new ImageIcon(gui.class.getResource(icon))); 
        }
Добавлено через 2 минуты
Для оформелиня иконки сообщения, смотрите тут: https://docs.oracle.com/javase... nPane.html
0
1 / 1 / 0
Регистрация: 01.03.2017
Сообщений: 53
12.09.2017, 22:53  [ТС]
только вот у меня itemStateChanged находится в другом слушателе и соответственно itemStateChanged(); не работает.
0
 Аватар для Kukstyler
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
12.09.2017, 23:44
dropych, так и слушать другого вроде как не надо. Иконку меняете на кнопке в зависимости от соединения а не от нажатия на кнопку.
0
1 / 1 / 0
Регистрация: 01.03.2017
Сообщений: 53
13.09.2017, 11:18  [ТС]
Так , я может не совсем понимаю, но
Java
1
2
3
4
public void itemStateChanged() {
            String icon = (Start.isSelected()) ? "/PFP/button_off.png" : "/PFP/button_on.png";
            Start.setIcon(new ImageIcon(gui.class.getResource(icon))); 
        }
Тут Start это JToggleButton, и она находится в другом методе, в котором gui программы находится. И если вставить такой обработчик смены иконки, JAVA не понимает, откуда брать этот Start. Подскажите, как можно указать на кнопку?
0
 Аватар для Kukstyler
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
13.09.2017, 12:13
dropych, если создаёте GUI в статическом классе (как я и предполагаю), то вроде можно добраться до кнопки так:

Java
1
MyStaticClass.Start.setIcon(new ImageIcon(gui.class.getResource(icon)));
0
1 / 1 / 0
Регистрация: 01.03.2017
Сообщений: 53
13.09.2017, 18:15  [ТС]
Если я не ошибаюсь, так можно вызвать только то, что возвращает метод
По крайней мере, так я понял из того, что мне еклипс жаловался на такую конструкцию)
0
 Аватар для Kukstyler
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
14.09.2017, 10:40
dropych, не знаю, наилучшее это решение или нет (что вполне возможно), но можно:
В классе где создаёте GUI создать новый метод:

Java
1
2
3
        public static JButton getButton() {
            return btnConnectionButton;
    }
В классе подключения, делаете:

Java
1
    MyGUIclass.getButton().setIcon(new ImageIcon(gui.class.getResource(icon)));
0
1 / 1 / 0
Регистрация: 01.03.2017
Сообщений: 53
14.09.2017, 11:26  [ТС]
Вы наверное не совсем поняли. Методы у меня в одном классе находятся ведь, просто что Jtogglebutton находится в privat методе.
0
 Аватар для Kukstyler
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
14.09.2017, 12:57
dropych, выложите полный проект, постараюсь поэкспериментировать прямо на нём.
0
1 / 1 / 0
Регистрация: 01.03.2017
Сообщений: 53
14.09.2017, 16:23  [ТС]
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
public static class mysql implements ActionListener {
 
     JFrame topFrame = (JFrame)SwingUtilities.getWindowAncestor(this);
    public void actionPerformed(ActionEvent e) {
 
        String ownip;
        String gettime;
        try {
            ownip = Getip.getip();
            gettime = Gettime.getip();
            JOptionPane.showMessageDialog(topFrame, "Error getIp");
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
            return;
        }
 
        StringBuilder lp = List.list();
        try {
 
            // opening database connection to MySQL server
            con = DriverManager.getConnection(url, user, password);
 
            // getting Statement object to execute query
            stmt = con.createStatement();
 
            String sql = "kakoi-to zapros";
 
            PreparedStatement preparedStatement = con.prepareStatement(sql);
 
            preparedStatement.executeUpdate();
 
             itemStateChanged();
 
        } catch (SQLException sqlEx) {
            sqlEx.printStackTrace();
            JOptionPane.showMessageDialog(topFrame, "Error SQL");
        }
 
    }
    public void itemStateChanged() {
        String icon = (Start.isSelected()) ? "/button_off.png" : "/button_on.png";
        Start.setIcon(new ImageIcon(gui.class.getResource(icon))); 
    }
}
 
private JFrame frmAnticheat;
 
 
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            try {
                gui window = new gui();
                window.frmAnticheat.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}
 
 
public gui() {
    initialize();
}
 
 
private void initialize() {
    frmAnticheat = new JFrame();
    frmAnticheat.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
 
    JToggleButton Start = new JToggleButton("", false);
 
    Start.setIcon(new ImageIcon(gui.class.getResource("/button_on.png")));
    Start.setBounds(108, 85, 132, 45);
    Start.setFocusable(false);
    Start.setBorderPainted(false);
 
    Start.setContentAreaFilled(false);
    frmAnticheat.getContentPane().add(Start);
 
    JLabel lblNewLabel = new JLabel("");
    lblNewLabel.setIcon(new ImageIcon(gui.class.getResource("/background4.png")));
    lblNewLabel.setBounds(0, 0, 346, 143);
    frmAnticheat.getContentPane().add(lblNewLabel);
 
    Start.addItemListener(new ItemListener() {
 
    Start.addActionListener(actionListener);
}
 }
0
 Аватар для Kukstyler
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
15.09.2017, 14:16
dropych, это не полный проект (всё пестрит). Лучше скиньте ZIP/RAR файл всего проекта (все файлы).

Неуверен, хорошо ли я Вас понял. Но можете попробовать обявить наддую конпку глобальной и статической в классе. А дальше как я показываль, соорудить метод возвращающий ссылку на неё.

П.С. название класса всегда начинается с большок буквы. Статических классов как таковых в Java не существует (хотя можно симулировать статический класс вот так: https://stackoverflow.com/ques... es-in-java)
0
1 / 1 / 0
Регистрация: 01.03.2017
Сообщений: 53
15.09.2017, 23:47  [ТС]
Спасибо решил проблему)
если кому понадобится вдруг. Тупо создал отдельный класс для кнопки) а затем ссылался на нее, как в вашем примере
Java
1
2
3
4
5
public static class Jbutton{
        
        
        static final JToggleButton Start = new JToggleButton("", false);
    }
1
 Аватар для Kukstyler
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
16.09.2017, 10:15
dropych, вообще визуальные компоненты лучше объявлять все вместе в таком месте откуда их легко можно достать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.09.2017, 10:15
Помогаю со студенческими работами здесь

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

Диалоговое окно
Доброго времени суток всем. Возникла проблема, которую я не знаю как решить. Вообщем на стороне клиента ведёться небольшой опрос( связано с...

Диалоговое окно
Подскажите как в диалоговое окно можно поместить календарь и возможность выбирать в нем дату Спасибо

диалоговое окно
госпада открываю деалоговое окно вот так - memset(&amp;OpenFileName, 0, sizeof(OPENFILENAME)); OpenFileName.lStructSize =...

Диалоговое окно
Здравствуйте. Помогите с решить данную задачу: на рисунке представлено то как должно выглядеть диалоговое окно. Я не знаю как связать с...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
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. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru