Использование jWindow в качестве экрана-заставки, который показывает хорошо, но изображение не рисует просто пустой jWindow открыл какие-то мысли?

  1. jWindow открылся на 2 секунды, но изображение не прорисовывается... есть мысли?
  2. файл изображения находится в той же папке, что и файл класса...
public class CreateSplashScreen extends JWindow {
    JWindow jw = new JWindow();
    Image scImage = Toolkit.getDefaultToolkit().getImage("testImage.png");
    ImageIcon imageIcon = new ImageIcon(scImage);
    public CreateSplashScreen() {
        try {
            jw.setSize(700, 500);
            jw.setLocationRelativeTo(null);
            jw.setVisible(true);
        } catch (Exception e) {
        }
    }

    public void paint(Graphics g) {
       super.paint(g);
       g.drawImage(scImage, 0, 0, jw);
    }

    public void CloseSplashScreen() {
        jw.setVisible(false);
    }
    
    public static void main(String[] args) {
        CreateSplashScreen sp = new CreateSplashScreen();
        try {
            Thread.sleep(2000);
        } catch (InterruptedException ex) {
            Logger.getLogger(CreateSplashScreen.class.getName()).log(Level.SEVERE, null, ex);
        }
        sp.CloseSplashScreen();
    }
    
}
  1. jWindow открылся на 2 секунды, но изображение не прорисовывается... есть мысли?
  2. файл изображения находится в той же папке, что и файл класса...

person Hana    schedule 02.08.2020    source источник


Ответы (2)


Почему вы создаете внутренний JWindow, когда ваш класс CreateSplashScreen уже расширяет JWindow? В этом нет необходимости. Вы портите свою программу.

Как? На самом деле вы просматриваете внутренний JWindow на jw.setVisible(true);, но рисуете изображение в CreateSplashScreen `JWindow.

Попробуйте этот код:

public class CreateSplashScreen extends JWindow 
{
    ImageIcon i = new ImageIcon(getClass().getResource("/createsplashscreen/testImage.png"));
    
    public CreateSplashScreen() {
     setSize(700, 500);
     setLocationRelativeTo(null);
     setVisible(true);
    }

    @Override
    public void paint(Graphics g) {
     super.paint(g);
     g.drawImage(i.getImage(), 0, 0, null);
    }

    public void CloseSplashScreen() {
     setVisible(false);
    }
    
    public static void main(String[] args) {
        CreateSplashScreen sp = new CreateSplashScreen();
        try {
            Thread.sleep(2000);
        } catch (InterruptedException ex) {
            
        }
        sp.CloseSplashScreen();
    }    
}

Примечание. Я не знаю о вашем методе извлечения ресурса изображения из исходной папки.

Изменить. Предполагая, что имя пакета, содержащего ваш класс CreateSplashScreen, равно createsplashscreen, убедитесь, что изображение testImage.png присутствует в пакете createsplashscreen вашего проекта.

person Miles Morales    schedule 02.08.2020
comment
Нужен ли мне метод для извлечения изображения из папки? - person Hana; 02.08.2020
comment
Не знал об этом... может поэтому и не покрасил? Не могли бы вы дать мне подсказку, если можете? - person Hana; 02.08.2020
comment
@Hana Нужен ли мне метод для извлечения изображения из папки? - я сказал, что не знаю о вашем методе. Это может сработать. А может и нет. Если это не так, попробуйте прочитать этот пост stackoverflow.com/questions/6845231/ - person Miles Morales; 02.08.2020
comment
@Hana Я обновил код в ответе, и он работает. Попытайся. - person Miles Morales; 02.08.2020
comment
@Hana Совет: узнайте больше о том, как включить ресурсы в папку вашего проекта и как получить эти ресурсы из папки вашего пакета. Здесь вы можете начать с: stackoverflow.com/questions/22928116/ и stackoverflow.com/questions/14819454/ - person Miles Morales; 02.08.2020
comment
Спасибо, Питер ... попробовал ваш код, но в итоге получил java.lang.NullPointException. путь /имя пакета/файла изображения также создал папку Resources в папке пакета src и файле /Resources/image, но это тоже не сработало .... всегда заканчивалось ошибкой NullPointException .... теперь нет вариантов. Я делаю что-то неправильно? - person Hana; 03.08.2020
comment
@Hana Можете ли вы отредактировать вопрос и добавить скриншот структуры вашего проекта, показывающий расположение вашего файла изображения и класса CreateSplashScreen? Кроме того, добавьте свой текущий код, в котором вы получаете NullPointerException. - person Miles Morales; 03.08.2020
comment
Как вы сказали, файл изображения находится внутри папки пакета, я каким-то образом добавляю строку в манифест. mf как SplashScreen-Image: /packagename/imagefile и эта решенная проблема. Добавлю снимок экрана, когда я вернусь домой, для любой возможной проблемы. Спасибо Питер - person Hana; 04.08.2020

Снимок экрана со структурой файла

@Peter Для кода ошибки я удалил одну строку, которую добавил в файл mamifest.mf, и создал программу ... На этот раз не выдало мне ошибку, странно ... Я следил за кодом ошибки, когда получил его и это привело меня к чему-то вроде раздела CLASSPATH кода, сгенерированного приложением... извините, я точно не помню. Очень благодарен Питеру за вашу помощь. Желаю удачи...

person Hana    schedule 04.08.2020