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

Трабл с выводом текста в GUI Java

03.03.2016, 21:44. Показов 2051. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не знаю я, как правильно описать свою проблему, так что записал видео.
Записывал на скорую руку, так что возможно говорил в некоторых местах без выражения и не понятно.
Но суть проблемы сказал вроде чётко. Кто знает в чём проблема - прошу помощи.
Ссылка на видео [Ютуб].
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.03.2016, 21:44
Ответы с готовыми решениями:

Java Socket Chat + GUI трабл с сообщениями
Господа нужна консультация. Решил написать простенький сокет чат, изучил литературу нашел несколько примеров и скомпоновал самые удачные...

Вывод текста Java Swing GUI
Возникала проблема. Описал и показал, в чём заключается проблема на видео. >>ССЫЛКА<< YouTube P.S. Когда то у меня...

Трабл с выводом
Нужно вывести из базы инфу, которая должна совпадать выбранной ссылке! Ссылка формируется правильно! Но не работает вывод из базы, что...

21
 Аватар для Doctor_
238 / 237 / 142
Регистрация: 03.02.2011
Сообщений: 1,437
04.03.2016, 09:58
Что происходит если убрать UI из уравнения? Всё работает?
0
3 / 3 / 0
Регистрация: 22.02.2016
Сообщений: 97
04.03.2016, 13:16  [ТС]
Да, всё работает стабильно. Проблем не наблюдается.
0
 Аватар для Doctor_
238 / 237 / 142
Регистрация: 03.02.2011
Сообщений: 1,437
04.03.2016, 13:31
Не знаю, я бы попробовал UI в отдельном потоке запускать.
0
3 / 3 / 0
Регистрация: 22.02.2016
Сообщений: 97
05.03.2016, 11:31  [ТС]
Потоки? Слышал по них, но ещё не узнавал что и как в них работает.
Видно пришло время...

Добавлено через 31 минуту
Посмотрев туториал по потокам, я понял, что потоки позволяют выполнять не 1 задачу - одновременно.
Но вот пока как применить это - я не понял. Пойду ещё посмотрю и почитаю.
Кстати, а может у Вас найдётся туториал(лично проверен Вами), где будет подробно всё рассказано\описано?

Добавлено через 20 часов 57 минут
Вот у меня GUI запускается через главный поток, т.е. оно было сгенерировано в GUI Bulder нетбинса.
Как же я его то в отдельно потоке запущу?
0
 Аватар для Doctor_
238 / 237 / 142
Регистрация: 03.02.2011
Сообщений: 1,437
05.03.2016, 11:47
1) Или UI запускать потом;
2) Или запускать читалку потом;
В итоге будет что-то типа:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
public class Main {
   
  public Main() {
     // ui или читалки логика
    new Threader().start();
  }
   
private class Threader extends Thread {
   public void run(){
      // ui или читалки логика
   }
}
}
0
3 / 3 / 0
Регистрация: 22.02.2016
Сообщений: 97
05.03.2016, 21:20  [ТС]
Вроде сделать.
Изменения нет.
Метод main
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
public static void main(String args[]) throws IOException {
        
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see [url]http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html[/url] 
         */
        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(Analiz.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(Analiz.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(Analiz.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(Analiz.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>
        
        //Начиная с этой строки писал я. Всё что выше, было сгенерировано GUI Bilder.
 
        Thread thread = new Thread(new Analiz_startGUI());
        thread.start();
        
        Analiz_CheckFileSize acfs = new Analiz_CheckFileSize(); 
        acfs.StartTimerCheckFile();
        
    }

отдельный класс, от куда идёт запуск GUI...
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
public class Analiz_startGUI implements Runnable{
 
    @Override
    public void run() {
        java.awt.EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Analiz().setVisible(true);
            }
        });
    }
 
}
Проблема не изменилась.

Добавлено через 4 минуты
Я вроде как сделал так же (выше пример), т.е. запускаю новый поток, через который инициализируется интерфейс, а далее уже в потоке main запускаю "читалку".

Добавлено через 9 часов 25 минут
Я в тупике...
0
20 / 15 / 5
Регистрация: 20.11.2014
Сообщений: 115
07.03.2016, 21:34
2 потока.
1. EDT - сам интерфейс. Оттуда запускаем логику программы.
2. Переделать парсер, ибо я видел там много циклов.

Вот еще:
https://docs.oracle.com/javase... ation.html
0
3 / 3 / 0
Регистрация: 22.02.2016
Сообщений: 97
08.03.2016, 09:36  [ТС]
Спасибо, что хоть кто то откликнулся помочь.
1. "EDT - сам интерфейс. Оттуда запускаем логику программы." - не понял данную строчку. Где это находится?
2. Парсер... за 1 раз работает только 3 цикла [совпадения строк со словами в массивах].
У меня есть проверка, какой раз сканируется файл, если он сканируется не в первый раз, то он сканируется там, где остановился. Там глобальная переменная проверяется при начале сканирования, и если по ней видно, что сканирование полное уже было, то пропускается уже прочитанные строки в файле.
0
20 / 15 / 5
Регистрация: 20.11.2014
Сообщений: 115
08.03.2016, 10:12
ImagePrototype,
1. Когда создаёте UI, то главный поток, где находится UI называется EDT(Event Dispatch Thread), оттуда уже можно запускать побочные потоки.
2. Watch Service API позволяет узнать, изменился ли файл не открывая его.(в любом случае эффективнее ваших циклов)
3. Переписать считыватель, так как возможно он и зависает.
4. Предоставить код нам, может найдётся человек, который перепишет его так, как Вам надо.
0
3 / 3 / 0
Регистрация: 22.02.2016
Сообщений: 97
08.03.2016, 11:44  [ТС]
Я походу не правильно написал.
Файл у меня проверяется не в циклах.
В циклах проверяется каждая считанная строчка на совпадения в массивах.
Вот так проверяется файл на изменение его размера.
Передвижение, пропуск уже прочитанных данных по файлу и сканирование происходит с помощью класса RandomAccessFile .
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
public class Analiz_CheckFileSize {
    
    static long CheckFile1;
    static long CheckFile2;
    static int CheckFileSize = 0;
    
    void StartTimerCheckFile() throws IOException {   
        
        Timer timer = new Timer();
        TimerTask checkFeed = new TimerTask() {
            @Override
            public void run() {
                try {
                    CheckFile();
                } catch (IOException ex) {
                    Logger.getLogger(Analiz_CheckFileSize.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        };    
        timer.schedule(checkFeed, 0, 2 * 1000);
    }
    
    static void CheckFile() throws IOException {
      
        if(CheckFileSize < 1){
            Path file = Paths.get(fileName);
            BasicFileAttributes CheckSizeFile = Files.readAttributes(file, BasicFileAttributes.class);
            CheckFile1 = CheckSizeFile.size();
            //System.out.println(CheckFile1);
            CheckFileSize++;
            System.out.println("Сейчас файл будет читается >>>В ПЕРВЫЙ РАЗ<<<!");
            //System.out.println("CheckFile1: " + CheckFile1);
            Analiz.logParser();
        } else {
            Path file = Paths.get(fileName);
            BasicFileAttributes CheckSizeFile = Files.readAttributes(file, BasicFileAttributes.class);
            CheckFile2 = CheckSizeFile.size();
            if(CheckFile1 < CheckFile2) {
               //System.out.println("CheckFile2: " + CheckFile2);
               //System.out.println("Сейчас файл будет читается >>>НЕ В ПЕРВЫЙ РАЗ<<<!");
               CheckFile1 = CheckFile2;
               Analiz.logParser();
            } else {
               //System.out.println("Файл не изменился в своём размере! Анализ файла не требуется.");
            }
        }   
    }    
}
Добавлено через 32 минуты
И да, если запускать программу без интерфейса, то работает всё чудесно.
Без зависаний и вылетов. Так что, у меня конкретно проблемы, когда подключаю интерфейс.
0
20 / 15 / 5
Регистрация: 20.11.2014
Сообщений: 115
08.03.2016, 11:50
О боже, это невозможно читать!
Вам же уже сказали, запустить в отдельном потоке анализатор и парсер.

Псевдокод:
Java
1
2
3
4
5
6
7
class FileAnalyzer implements Runnable {
  public void run() {
    // Анализатор
  }
}
 
new Thread(new FileAnalyzer()).start();
0
3 / 3 / 0
Регистрация: 22.02.2016
Сообщений: 97
08.03.2016, 12:50  [ТС]
Да, туплю. Сильно. Ибо многого ещё не знаю.
Я правильно понял? Мне требуется сделать так, что бы:
1. Сам интерфейс запускался в главном потоке.
2. С главного потока запускать поток на сканирования файла на изменения его размера.
3. Сделать отдельный поток на само сканирование файла.
Всё правильно?
0
20 / 15 / 5
Регистрация: 20.11.2014
Сообщений: 115
08.03.2016, 14:08
ImagePrototype,
Да.
1
3 / 3 / 0
Регистрация: 22.02.2016
Сообщений: 97
10.03.2016, 18:31  [ТС]
Здравствуйте.
У меня появилось время и я решил попробовать сделать то, что было написано выше.
Собственно вот видео с тем что получилось...
Осталось только добавить то, что я не сказал в видео про таймер.
Без всяких потоков и зависаний он работает стабильно, короче говоря - с таймеров всё нормально.
0
20 / 15 / 5
Регистрация: 20.11.2014
Сообщений: 115
10.03.2016, 18:44
Вы java по туториалам учите что ли? Рекомендую Хорстмана, хотя бы 1 том.(9 издание)

По поводу Ваших вопросов:
1. Данные в GUI можно изменить только через EDT.
2. Вы создаёте новый экземпляр класса и пытаетесь изменить jTextFiled1 в main, хотя в это время он не инициализирован. Вы инициализируете его конструктором(GUI), но результат игнорируете.
3. Код таймера ужасен. Вам нужно только 2 потока. 1 - EDT, 2 - логика программы. Не нужно плодить больше потоков.
4. Обязательно прочитайте хотя бы 4-5 глав в книге Хорстмана, отпадёт более 60% вопросов.
1
3 / 3 / 0
Регистрация: 22.02.2016
Сообщений: 97
10.03.2016, 19:10  [ТС]
1. Эм... Туториалы чисто для каких то отдельных случаев (потоки к примеру) , всё остальное по урокам на ютубе.
Не сочтите на пиар, кидаю чисто для того, что бы поняли, от куда брал базовую информацию [1] и [2] .

1. 1. Данные в GUI можно изменить только через EDT. - не знал. Спасибо.
2. Вы создаёте новый экземпляр класса и пытаетесь изменить jTextFiled1 в main, хотя в это время он не инициализирован. Вы инициализируете его конструктором(GUI), но результат игнорируете. :
1. Как не инициализирован? Я ж по идее его запустил, дал ему уже какие либо указания.
2. Не понимаю - результат игнорируете, сможете по подробнее отписать или кинуть где прочитать.
3. Таймер. Код копипастил, в дальнейшем хотел более детальней его изучить и сделать нормально.
Так, про потоки понял. Только 2 требуется.
4. Немедленно попытаюсь найти её и начать читать.
Огромное спасибо за помощь.

Добавлено через 12 минут
Книжку уже нашёл и скачал)
0
20 / 15 / 5
Регистрация: 20.11.2014
Сообщений: 115
10.03.2016, 19:18
Это не паскаль же! Вы не понимаете принципов разработки, Ваш код ужасен! Если бы я был Вашим преподавателем - не поставил бы зачетку.
Скажу честно, настолько ужасного кода я в жизни не видел. Честное слово.
Почитайте книгу, первые 2-3 главы дадут Вам много знаний.
И еще, не надейтесь на всяческие туториалы. Они нужны для либо знающих хоть что-то, либо для тех, кто хочет посмотреть чужие реализации.

На счет Вашего вопроса:
В программе, когда запускается main, еще нет никаких объектов, метод статичный.
Вы создаёте через EDT новый экземпляр класса с GUI. В том классе уже инициализируется Ваш jTextField. С тем объектом Вы уже можете взаимодействовать.
на счет Ваших циклов не скажу ничего, но это явно кривая архитектура.

Ничего, я тоже когда-то делал такие ошибки =)

Добавлено через 21 секунду
Ссылку удалите, забанят!
0
3 / 3 / 0
Регистрация: 22.02.2016
Сообщений: 97
10.03.2016, 19:26  [ТС]
1. Прям "обкакали" меня, ну да ладно, сам понимаю, что ещё много чего не знаю.
Ну, учился сам, как преподавали на ютубе)
2. А вы являетесь чьим то преподавателем?
3. Там не jTextField, а jTextArea, хотя в принципе не важно)
4. Циклы выглядят страшно конечно, но по другому пока не знаю как сделать.
5. Вы создаёте через EDT новый экземпляр класса с GUI. В том классе уже инициализируется Ваш jTextField. С тем объектом Вы уже можете взаимодействовать. - я вроде это как знаю, слышал в уроках, но забыл это, когда начал что то делать с интерфейсами.
4. Ссылку попробую удалить, если конечно лимит редактирования не кончился.
Спасибо за ответы.

Добавлено через 15 секунд
Песец, удалить ссылки уже нельзя)
0
20 / 15 / 5
Регистрация: 20.11.2014
Сообщений: 115
10.03.2016, 19:41
Нет, я не учитель, просто читал Хорстмана.(Так и не дочитал =))
Я же скидывал ссылку, https://docs.oracle.com/javase... ation.html , это специальное API, и сработает оно сразу же, как файл изменится, не нужно будет каждые 5 секунд проверять файл.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.03.2016, 19:41
Помогаю со студенческими работами здесь

Трабл с выводом
$code = $_GET; $specialty = mysql_query (&quot;SELECT * FROM speciatly WHERE `specialty code` = &quot;.$code,$db); while ($myspecialty =...

Трабл с выводом данных из БД
Привет всем. Пишу программу на MFC с использованием БД. но когла программа включается , открывается странное диалоговое окно (см. Скрин...

Трабл с вводом/выводом
Вот есть код: #include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; int main(){ setlocale(0,&quot;&quot;); char a; ifstream...

Трабл с выводом страницы в textarea
Доброго времени суток, коллеги! Столкнулся с проблемой: вывожу в визуальный редактор (непосредственно в элемент textarea) необходимую...

Трабл с выводом в мемо. Матрица.
Вобщем дана целочисленная кв.матрица.Делаю визуально. Заполняю рандомно в стринггрид матрицу.В Мемо1 нада вывести сумму диогоналей...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru