Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
12 / 8 / 6
Регистрация: 10.07.2011
Сообщений: 374
Записей в блоге: 1

Передача данных между классами

07.09.2018, 05:18. Показов 2125. Ответов 1

Студворк — интернет-сервис помощи студентам
Делаю Telegram-бота, который будет пересылать построчно логи из файла построчно. Что есть? Код бота, в частности метод, обрабатывающий новые сообщения от пользователя:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
    public void onUpdateReceived(Update arg0) {     
        Message msg = e.getMessage(); 
        String txt = msg.getText();
        if (txt.equals("/start")) {
            sendMsg(msg, "Hello!"); 
        } else{
            if (txt.equals("/print")){
                //-----------           
                sendMsg(msg, "   ");
            } else
                sendMsg(msg, txt);} 
        
    }
Если пользователь написал "/start", бот отвечает ему "Hello!".
Если пользователь написал "/print", бот должен добавить его в список рассылки строк из логов.
Если пользователь написал что-то другое, бот должен отправляет это же сообщение в ответ.

Чтение из файла происходит в потоке.
Кликните здесь для просмотра всего текста

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
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;
 
public class ReaderTd extends Thread
    {
        
        private BufferedReader inputLog;
        private String FilePath = "log.log";
        
        public void run(String path){
            System.out.println("RUN");
            try {
            Integer timeInterval = 100;
            inputLog = new BufferedReader(new java.io.FileReader(path));
            String currentLine=null;
            do {
                if(!Thread.interrupted()) {
                    try {
                            currentLine = inputLog.readLine();
                            if (currentLine != null) {
                                //Обработать и вывести строку
                                System.out.println(currentLine);
                                continue;
                            }
                            
                            
                        } catch (IOException e) {                       
                            e.printStackTrace();
                            System.out.println("Ошибка чтения файла");
                        }
                        
                } else
                    return; 
                try{
                        Thread.sleep(timeInterval);     //Приостановка потока.
                }catch(InterruptedException e){
                        return;
                }               
            }
            while (true);
            }
            catch (FileNotFoundException e1) {
                e1.printStackTrace();
                System.out.println("Ошибка открытия файла");
            }
            finally {
                try {
                    inputLog.close();
                } catch (IOException e) {
                    System.out.println("Ошибка закрытия файла");
                    e.printStackTrace();
                }
            }
        }               
        
        
        @Override
        public void run()
        {
            System.out.println("RUN1");
            run(getFilePath());
        }
 
        public String getFilePath() {
            return FilePath;
        }
 
        public void setFilePath(String filePath) {
            FilePath = filePath;
        }
    }

Сейчас в коде вывод строк идет в консоль.
Java
1
System.out.println(currentLine);
Эту строку кода хочу заменить на функцию, заставляющую бота отправлять сообщения со строками людям из списка.
Проблема заключается в том, что это 2 разных класса, которые работают параллельно. Я не совсем понимаю, как организовать обмен данными между ними? Как сделать так, чтобы бот мог получать новые строки для отправки от потока, читающего файл? Где вообще лучше всего хранить список пользователей (точнее список комнат чата, представленных числами типа long)?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.09.2018, 05:18
Ответы с готовыми решениями:

Передача данных между потоками/процессами
Ребят, у вас тут поактивнее раздел. В соседней ветке .NET я не нашел решения, может java-программисты знают как лучше сделать. Суть...

Передача данных между java приложениями при плохом соединении. Посоветуйте технологии
Есть сервер и некоторое количество клиентов. Сервер в зависимости от ситуации будет отправлять сигналы, данные клиентам. Клиент...

Вопрос по передаче переменных между классами
Здравствуйте. Есть вопрос касательно доступа к переменным и объектам из одного класса в другой. В данный момент я использую NetBeans и...

1
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7391 / 4818 / 1246
Регистрация: 30.03.2015
Сообщений: 13,693
Записей в блоге: 29
07.09.2018, 06:05
Лучший ответ Сообщение было отмечено Bohes как решение

Решение

1) для начала мог потренироваться на двух простеньких классах, один скажем читает из файла (в отдельном потоке) второй пишет в консоль. чтобы понять как это сделать.
2) вместо буфридера я бы применил сканнер, у него есть метод проверяющий есть ли еще что считать, не придется на нулл проверять. но это мое предпочтение
3) паттерн Наблюдатель (обсервер), при появлении новой строки уведомлять твой бот, а он уже дальше действует по ситуации
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.09.2018, 06:05
Помогаю со студенческими работами здесь

Jsoup парсинг взаимодействие между классами - подскажите разобраться
Есть класс который парсит xml файл public class Myversion { public static void main(String argv) { try { ...

Передача значений между классами
Подскажите, как грамотно реализовать передачу данных между классами. В классе А есть переменная, также для этой переменной есть get и...

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

Работа между классами
Есть главный класс main.java, есть класс pampam.java, созданный отдельно путем "new"->"Java class"... Как можно вызвать из main,...

Настройка видимости между классами
У меня такая структура программы (s1). org controllers MainFrame.java UsersFrame.java models DBObject ...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
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 Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
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. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru