Wie verwende ich SplashScreen, ohne eine NullPointerException auszulösen?


Egal was ich versuche,SplashScreen.getSplashScreen() istimmer null.

Wenn ich online suche, sehe ich, dass dies ein häufiges Problem ist und dass es etwas damit zu tun hat, dass man das nicht gibtSplashScreen ein zu verwendendes Bild ... Daher kam es mir beim Navigieren in den Methoden so vorsetImageURL(URL) sollte benutzt werden. Das funktioniert immer noch nicht.

Es gibt ähnliche Fragen zu SO, wie zdiese, die nicht hilfreich sind und nahe legen, eine Vielzahl von Plugins zu verwenden oder eine solche Klasse von Grund auf neu zu erstellenFrame. Sogar dieOracle-Tutorial ist kryptisch und beschreibt nicht jeden logischen Schritt bei der VerwendungSplashScreen korrekt...

Wenn es nicht möglich oder unnötig schwierig zu bedienen istSplashScreenGibt es eine Alternative dazu? Oder hat jemand eine einfache Herangehensweise an dieses Problem gehackt?

Hier ist mein Versuch:

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.SplashScreen;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.URL;

/**
 */
public final class MainGUI implements ActionListener {

    /**
     * @throws IOException 
     * @throws IllegalStateException 
     * @throws NullPointerException 
     */
    private final static void showSplashScreen() throws NullPointerException, IllegalStateException, IOException {
        final SplashScreen splash = SplashScreen.getSplashScreen();
        Graphics2D graphics = splash.createGraphics();

        // adding image here:
        URL imageSource = new URL("http://upload.wikimedia.org/wikipedia/commons/thumb/7/76/Space_Shuttle_Atlantis_approaching_the_Kennedy_Space_Center_to_land_following_STS-122.jpg/800px-Space_Shuttle_Atlantis_approaching_the_Kennedy_Space_Center_to_land_following_STS-122.jpg");
        splash.setImageURL(imageSource);

        // coordinates and dimensions:
        int x = 100, y = x;
        int width = 500, height = width;

        // (x, y), width, height:
        graphics.create(x, y, width, height);

        graphics.setBackground(Color.BLUE);

        // adding and centering the text:
        graphics.drawString("centered text", (x + width)/2, (y + height)/2);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        try {
            showSplashScreen();
        } catch (NullPointerException | IllegalStateException | IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
} // end of MainGUI

Antworten auf die Frage(1)

Ihre Antwort auf die Frage