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

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

07.09.2018, 05:18. Показов 2103. Ответов 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
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru