Проблема с отображением кадра - PullRequest
1 голос
/ 24 мая 2010

Я сделал один проект, который показывает инвентаризацию запасов одного магазина.
В этом инвентаре программное обеспечение должно хранить данные продуктов с их изображениями.
Есть одна проблема ...
Bcz лотов, экран, на который загружается изображение, занимает много времени.
Итак, я подумал, что должен дать кадр, в котором будет на этикетке, которая будет показывать «Загрузка программного обеспечения».
Но теперь, когда я устанавливаю visible = true для этого кадра, но из-за проблемы загрузки классов экрана этих изображений мой кадр не отображается правильно. Я поставил снимок экрана , теперь мой код.

JFrame f;
    try{
            f = new JFrame("This is a test");
            f.setSize(300, 300);
            Container content = f.getContentPane();
            content.setBackground(Color.white);
            content.setLayout(new FlowLayout());
            JLabel jl = new JLabel();
            jl.setText("Loading Please Wait....");
            content.add(jl);
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.setVisible(true);
        }catch(Exception e){
            e.printStackTrace();
        }
        initComponents();
        try {
            addInverntory = new AddInventoryScreen(); 
            showstock = new showStock(); // this class will take big time.
            mf = new mainForm();
            f.setVisible(false);
        }catch (Exception ex) {
            ex.printStackTrace();
        }

Как может показать какое-то сообщение о том, что другой класс загружает или "загрузка программного обеспечения" в этом случае?

Просто для ознакомления .... этот класс не является экраном, на котором будет загружаться изображение.

Ответы [ 3 ]

3 голосов
/ 24 мая 2010
  1. Сложно ответить на этот вопрос, потому что неясно, каковы (Swing-wise) эффекты при вызовах new AddInventoryScreen(); и new showStock();. Вы должны касаться только того интерфейса, который пользователь видит в самом конце (когда вся обработка завершена).

  2. Вы действительно должны выделить методы, которые займут много времени в своем собственном потоке (см. SwingWorker . Существуют альтернативы для Java 5.0). Таким образом, пользовательский интерфейс не будет заблокирован во время обработки.

  3. Может быть, вам нужен Заставка ?

1 голос
/ 24 мая 2010

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

Операции с графическим интерфейсом (создание компонентов Swing, добавление их на панели, смена меток ...) должны выполняться исключительно в « EDT » и должны быть короткими (обычно менее 100 мс или даже 50 мс). ).

Длинные операции могут быть легко выполнены другим потоком, если вы используете SwingWorker API (часть JDK 1.6).

1 голос
/ 24 мая 2010

Попробуйте вызвать validate(); и pack(); методы перед вызовом f.setVisible(true);

Ваш код может быть

validate();
pack();
f.setVisible(false);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...