Почему мое приложение на основе Swing не отвечает? - PullRequest
0 голосов
/ 17 февраля 2010

Я пытаюсь создать свое первое приложение с графическим интерфейсом (Java + Eclipse + Swing). Это мой код:

import java.awt.*;
import javax.swing.*;


public class HelloWorldSwing extends JFrame {

        JTextArea m_resultArea = new JTextArea(6, 30);

        //====================================================== constructor
        public HelloWorldSwing() {
            //... Set initial text, scrolling, and border.
            m_resultArea.setText("Enter more text to see scrollbars");
            JScrollPane scrollingArea = new JScrollPane(m_resultArea);
            scrollingArea.setBorder(BorderFactory.createEmptyBorder(10,5,10,5));

            // Get the content pane, set layout, add to center
            Container content = this.getContentPane();
            content.setLayout(new BorderLayout());
            content.add(scrollingArea, BorderLayout.CENTER);
            this.pack();
        }

        //============================================================= main
        public static void main(String[] args) {
            JFrame win = new HelloWorldSwing();
            win.setTitle("TextAreaDemo");
            win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            win.setVisible(true);
        }


}

Код был взят из здесь .

Когда я запускаю приложение из Eclipse, появляется ожидаемое окно (так что это хорошо. Я вижу то, что хочу увидеть). Однако, когда я пытаюсь закрыть окно или написать что-то в текстовой области, программа зависает. ОС пишет мне, что программа не отвечает (я пробую в Ubuntu).

Кто-нибудь может мне помочь найти причину проблемы?

Заранее благодарю за любую помощь.

Ответы [ 3 ]

1 голос
/ 27 февраля 2010

Я уверен, что это не имеет отношения к коду, так как другие считают, что код отлично работает на своих машинах, что указывает на специфическую для машины проблему.В Eclipse убедитесь, что он настроен на использование ожидаемого JDK / JRE.Однако, прежде чем беспокоиться о том, как Eclipse справится с вашей ситуацией, я сначала запустил бы все вручную, тем более что у вас очень простой класс.

Я бы проверил, чтобы вы использовали ожидаемыйкомпилятор и среда выполнения.В Linux:

which javac
which java

Если они оба соответствуют вашим ожиданиям, сделайте следующее:

javac HelloWorldSwing.java
java HelloWorldSwing 

Если у вас возникла похожая проблема, то вы знаете, что это не конфигурация Eclipse иэто что-то ещеЕсли вы не используете последнюю версию JDK, обновитесь до последней.Если вы уже не позднее, это может быть драйвер дисплея.Работают ли другие программы JAVA Swing на этом компьютере?Я уверен, что вы можете найти его в сети, скачать приложение, уже упакованное в виде jar, и попробовать запустить его.

0 голосов
/ 17 февраля 2010

вы пытались использовать eventdispatcherthread для просмотра JFrame?

что-то вроде:

public static void main(String[] args){
    SwingUtilities.invokeLater(new Runnable(){
        public void run(){
            createAndViewJFrame();
        }
    });
}

public void createAndViewJFrame(){
    JFrame win = new HelloWorldSwing();
    win.setTitle("TextAreaDemo");
    win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    win.setVisible(true);
}

тогда ваш кадр будет показан потоком диспетчера качания.

надеюсь, это помогло, хотя я просто догадываюсь ...

Обновление: как указали комментаторы, я обнаружил вызов invokeLater (). Я только что отредактировал этот пост, чтобы исправить это. Спасибо, что обратились к yishai и willcodejavaforfood за указание на это!

откровенное

0 голосов
/ 17 февраля 2010

Вам нужно поймать событие выхода и ответить System.exit( 0 );

Вы должны быть в состоянии найти это в большинство свинг-примеров онлайн.

неправильные вещи ... извините ... кофе ... ааа ....

...