2014-02-14 3 views
3

Я пытаюсь перенести проект Java Swing на Java Web Start , и у меня возникла проблема с заставкой. Это приложение использует Maven.Java SplashScreen в Java Web Start

Когда я загружаю приложение через командную строку или внешний exe, , он отображает заставку правильно.

final SplashScreen splash = SplashScreen.getSplashScreen(); 

При запуске приложения с помощью Java Web Start, он всегда возвращает null.

Да, я знаю о разделе заставки в файле JNLP.

<icon kind="splash" href="splash.png"/> 

Но это покажет заставку перед загрузкой приложения и не , когда приложение работает. Другими словами, это не замена переключателя --splash.

В файле манифеста, у меня есть:

SplashScreen-Image: (URL to resource, file in jar) 

Это хорошо работает только тогда, когда я запускаю файл банку, а не в Java Web Start.

У кого-то была эта же проблема и найдено какое-либо решение для этого? Мне нужен экран заставки, потому что для запуска приложения требуется несколько секунд, и в это время ничего не отображается для пользователя.

ответ

1

Всплеск на основе JWS использует совершенно разные функции (и другую философию загрузки) на основе AWT SplashScreen. Всплеск JWS всегда является свободным файлом, на который ссылается файл JNLP. Мы не можем получить доступ к розыгрышу всплеска JNLP.

+0

Да, но я думал, что в Java Web Start существует любая замена --splash switch или манифест записи SplashScreen-Image. – Krystek

2

Чтобы показать заставку для клиентов JNLP, вызовите метод start(), передающий путь изображения всплеска. Чтобы удалить заставку, вызовите метод stop().

public class ShowSplash 
{ 
    private static JWindow splashFrame; 

    public void start(String splashImagePath) throws Exception 
    { 
     JLabel label; 
     ImageIcon image; 
     URL url; 

     splashFrame = new JWindow(); 
     url   = ShowSplash.class.getResource(splashImagePath); 
     image  = new ImageIcon(url); 
     label  = new JLabel(image); 

     splashFrame.add(label, BorderLayout.CENTER); 
     splashFrame.pack(); 
     splashFrame.setLocationRelativeTo(null); 
     splashFrame.setVisible(true); 
    } 

    public void stop() throws Exception 
    { 
     splashFrame.dispose(); 

     splashFrame = null; 
    } 
} 
0

Спасибо за ответы, но у меня возникли проблемы с заменой SplashRenderer на JWindow.

Вот код:

splashFrame = new JWindow(); 

    splashFrame.setBackground(Color.white); 

    JPanel splashPanel = new JPanel(); 

    splashPanel.setLayout(new BorderLayout()); 

    JLabel image = new JLabel(img); 

    splashPanel.add(image); 

    splashFrame.setContentPane(splashPanel); 
    splashFrame.pack(); 
    splashFrame.setLocationRelativeTo(null); 
    splashFrame.setAlwaysOnTop(true); 
    splashPanel.paintImmediately(0, 0, splashPanel.getSize().width, splashPanel.getSize().height); 
    splashFrame.setSize(splashPanel.getSize().width,splashPanel.getSize().height); 
    splashFrame.setLocation(100, 100); 
    splashFrame.setVisible(true); 

Окно всегда находится в задней части, не имеет значения, если я не установлен setAlwyasOnTop или если установить эти методы в фоновом потоке. SplashRender в этом случае всегда остается на вершине, но JWindow нет.

В настоящее время действует - Когда я запускаю APP, окно не отображается во время запуска, но оно отображается при появлении MainFrame.