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

Как забрать данные из ActionListener и использовать их в BufferedReader без Thread.sleep

05.02.2025, 13:20. Показов 1885. Ответов 5
Метки java (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, всем пользователям форума. Я стажер в java и поэтому нуждаюсь в вашей помощи.
У меня есть кода, который ищет одинаковые строки в двух файлах формата csv. Я хочу добавить функцию, где человек может указать путь к файлу, а не прописывать заранее его в коде. Для этого использую библиотеки Swing.

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
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
public class PanelInput extends JFrame{
    //Поля для теста
    JTextField inputFileOne;
    JTextField inputFileTwo;
 
    //Кнопка для ввода
    JButton button;
 
    //Переменные для сохранения вписаного текста и передачи в BufferedReader
    private static String filePathOne;
    private static String filePathTwo;
 
    public static String getFilePathOne() {return filePathOne;}
    public static String getFilePathTwo() {return filePathTwo;}
 
    public static void setFilePathOne(String filePathOne) {PanelInput.filePathOne = filePathOne;}
    public static void setFilePathTwo(String filePathTwo) {PanelInput.filePathTwo = filePathTwo;}
    PanelInput(String filePathOne, String filePathTwo){
        this.filePathOne =filePathOne;
        this.filePathTwo =filePathTwo;
    }
 
    //Создаем окно ввода
    public void windowInput() {
        //окно ввода
        JFrame frame = new JFrame();
        //Инициализация переменных и кнопки
        inputFileOne = new JTextField();
        inputFileTwo = new JTextField();
        button = new JButton("Data entry");
        //Выводинм на экран поля и кнопки
        frame.getContentPane().add(BorderLayout.BEFORE_FIRST_LINE, inputFileOne);
        frame.getContentPane().add(BorderLayout.CENTER, inputFileTwo);
        frame.getContentPane().add(BorderLayout.SOUTH, button);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // Определяем размер окна и выводим его на экран
        frame.setSize(500, 200);
        frame.setVisible(true);
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                filePathOne = inputFileOne.getText();
                filePathTwo = inputFileTwo.getText();
            }
        });
    }
    public static void main(String[] args) throws InterruptedException {
        PanelInput panelInput = new PanelInput(filePathOne,filePathTwo);
        panelInput.windowInput();
        Thread.sleep(10000);
        System.out.println(panelInput.getFilePathOne());
        System.out.println(panelInput.getFilePathTwo());
 
 
    }
}
Выше код, где открывается панель для ввода адреса к файлу.
В поле inputFileOne и inputFileTwo вводиться адрес к файлу, в ActionListener я смотрю, что было записано и передаю в переменные filePathOne и filePathTwo.
При попытке через main их вывести у меня выводит null. В интернете много прочитал форумов и все советуют поставить Thread.sleep, т.к. в данных переменных пусто и поэтому программа выводит null, не успевая записать информацию которую я ввожу в поля ввода.
Подскажите как сделать, чтобы выводилось в System.out.println или передавалась информация в BufferedReader после нажатия кнопки, а не до нажатия.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.02.2025, 13:20
Ответы с готовыми решениями:

Как забрать данные из ActionListener
День добрый, интересует как забрать данные из ActionListener? По нажатию кнопки забираю данные из текстовых полей, присваиваю их...

Как использовать Thread.Sleep(5000), ошибка: "Элемент "Thread" не существует в текущем контексте"
я так понимаю, что Thread.Sleep(5000); это "тормоз" процесса выполенения программы на 5 сек? А как его правильно инициализировать и...

Как использовать Thread.Sleep() для нескольких задержек выполнения кода в WPF приложении?
Как использовать Thread.Sleep() для организации нескольких задержек выполнения кода c# в WPF приложении? В WPF приложении с одним...

5
 Аватар для Azathtot
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
05.02.2025, 13:39
Цитата Сообщение от Kdmitr Посмотреть сообщение
Подскажите как сделать, чтобы выводилось в System.out.println или передавалась информация в BufferedReader после нажатия кнопки, а не до нажатия.
Ну так в ActionListener и делайте. Если что - запускайте поток, который будет это обрабатывать и постить прогресс.
В main ничего быть не должно.
0
0 / 0 / 0
Регистрация: 26.07.2023
Сообщений: 4
05.02.2025, 15:15  [ТС]
BufferedReader и функция сравнения у меня в другом классе находиться. Поэтому не совсем удобно все в одну кучу загонять.
Тем более я результат записываю в файл.
0
 Аватар для Azathtot
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
05.02.2025, 16:48
Цитата Сообщение от Kdmitr Посмотреть сообщение
BufferedReader и функция сравнения у меня в другом классе находиться.
А что мешает вызвать один класс из другого-то?
Цитата Сообщение от Kdmitr Посмотреть сообщение
Тем более я результат записываю в файл.
Да хоть в файл, хоть что угодно делайте
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class MyWriter extends Thread {
 private String _a, _b;
 public MyWriter(String a, String b) {
    _a = a; _b = b;
   start();
 }
 public void run() {
  // Тут что-то куда-то записываем
 }
}
button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                new MyWriter(inputFileOne.getText(),inputFileTwo.getText());
            }
        });
0
0 / 0 / 0
Регистрация: 26.07.2023
Сообщений: 4
07.02.2025, 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
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import javax.swing.*;
 
public class Main {
    // класс-контейнер для данных, возвращаемых из диалога
    static class InputFiles {
        private final String fileOne, fileTwo;
 
        public InputFiles(String one, String two) {
           this.fileOne = one;
           this.fileTwo = two;
        }
 
        public String fileOne() { return fileOne; }
        public String fileTwo() { return fileTwo; }
    }   
 
    public static void main(String ... args) {
        InputFiles result = getFilenames();
        
        if (null == result) {
            System.out.println("File data not entered, exiting...");
            System.exit(0);
        }
        
        // обработка введенных данных
        System.out.println("Processing file1: " + result.fileOne());
        System.out.println("Processing file2: " + result.fileTwo());
    }
    
    private static InputFiles getFilenames() {
        JTextField pathOne = new JTextField();
        JTextField pathTwo = new JTextField();
        
        Object[] message = {
            "First file:  ", pathOne,
            "Second file: ", pathTwo
        };
 
        int option = JOptionPane.showConfirmDialog(null, message, "Input file names", JOptionPane.OK_CANCEL_OPTION);
        if (option == JOptionPane.OK_OPTION) {
            return new InputFiles(pathOne.getText(), pathTwo.getText());
        }
        return null;
    }
}
0
 Аватар для Azathtot
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
07.02.2025, 12:01
Цитата Сообщение от Kdmitr Посмотреть сообщение
Мне посоветовали так сделать и очень удобно оказалось.
А если вы перестанете заниматься функциональным программированием на ООП языке да еще с применением event-driven UI то вообще все будет прекрасно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.02.2025, 12:01
Помогаю со студенческими работами здесь

Компромис скорости и нагрузки на процессор - Thread.Sleep(0) и Thread.Sleep(1)
Всем привет! Есть бесконечный цикл. while(true) { ... } Внутри выполняются важные операции)

Thread.Sleep() или Timer. Что лучше использовать?
Здраствуйте уважаемые знатоки. Мне нужно опрашивать определенный метод с переодичностью 30 сек. Что лучше использовать чтобы нагрузка...

Дождаться выполнения Task без Thread.Sleep?
using System; public class Test { public static void Main() { Console.WriteLine("1"); var task = new...

Задержка функции вывода без использования Thread.sleep
Доброе время суток всем. Прошу о помощи Вас ) Возможно ли вывести сообщение с задержкой без использования Thread.sleep? Data now...

Многопоточное умножение матриц не работает без Thread.Sleep
Задача состоит в том, чтобы перемножить две матрицы n*m и m*k вычисляя произведение векторов в n*k процесах и продемонстрировать...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru