2014-02-14 5 views
3

Java Swing 프로젝트를 Java Web Start 으로 이동하려고하는데 스플래시 화면에 문제가 있습니다. 이 응용 프로그램은 Maven을 사용합니다.Java Web Start의 Java SplashScreen

명령 줄이나 외부 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) 

이 자바 웹 스타트에서 잘 내가 jar 파일을 실행하는 경우에만이 아니라 작동합니다.

아무도이 동일한 문제가 있었고이 문제에 대한 해결책을 찾았습니까? 응용 프로그램이 시작하는 데 몇 초가 걸리고이 시간에는 사용자에게 아무 것도 표시되지 않기 때문에 시작 화면이 필요합니다.

답변

1

JWS 기반 스플래시 화면은 SplashScreen을 기반으로 AWT에 완전히 다른 기능 (및 다른로드 원리)을 사용합니다. JWS 스플래시는 항상 JNLP 파일에서 참조되는 느슨한 파일입니다. 우리는 JNLP 스플래시에 접근 할 수 없습니다.

+0

네,하지만 자바 웹 스타트에서는 --splash 스위치 나 매니페스트 엔트리 인 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); 

윈도우가 뒤에 항상 내가 더 METTER setAlwyasOnTop을 설정하거나 만약 내가 백그라운드 스레드에서이 방법 을 설정합니다. 이 경우 SplashRender는 항상 맨 위에 있지만 JWindow는 유지되지 않습니다.

현재 효과가 있습니다. - APP를 시작하면 창을 시작할 때 표시되지 않지만 MainFrame이 표시 될 때 표시됩니다.

관련 문제