使用 SplashScreen.setImageURL(link) 更改 SplashScreen 图像;

Moh*_*amy 1 java url netbeans splash-screen

我在 Oracle 文档中找到了一个关于 SplashScreen 的示例。问题是在这个例子中,这里使用的图像的链接在命令行中作为参数传递。我正在尝试更改代码,以便将链接写在里面,我不需要使用命令行。

methodesetImageURL(URL imageURL)应该能够为我完成这项工作,但它不接受我的参数(参数)。

我读过 URL 类,似乎它需要协议!像http和ftp这样的协议?如果是这样,我的 url 应该如何用于计算机中的文件?当我尝试从我的计算机(例如:)放置链接时,"C:\plash.gif"它说illege excape character

我什至尝试对图像使用 http 链接,但它在 URL 行中给了我这个错误:

non-static method setImageURL(URL) cannot be referenced from a static context
Run Code Online (Sandbox Code Playgroud)

这是代码:

package misc;

import java.awt.*;
import java.awt.event.*;
import java.net.URL;

public class SplashDemo extends Frame implements ActionListener {
    static void renderSplashFrame(Graphics2D g, int frame) {
        final String[] comps = {"foo", "bar", "baz"};
        g.setComposite(AlphaComposite.Clear);
        g.fillRect(120,140,200,40);
        g.setPaintMode();
        g.setColor(Color.BLACK);
        g.drawString("Loading "+comps[(frame/5)%3]+"...", 120, 150);
    }
    public SplashDemo() {
        super("SplashScreen demo");
        setSize(300, 200);
        setLayout(new BorderLayout());
        Menu m1 = new Menu("File");
        MenuItem mi1 = new MenuItem("Exit");
        m1.add(mi1);
        mi1.addActionListener(this);
        this.addWindowListener(closeWindow);

        MenuBar mb = new MenuBar();
        setMenuBar(mb);
        mb.add(m1);
        URL link= new URL("http://docs.oracle.com/javase/tutorial/uiswing/examples/misc/SplashDemoProject/src/misc/images/splash.gif");
        SplashScreen.setImageURL(link);
        final SplashScreen splash = SplashScreen.getSplashScreen();
        if (splash == null) {
            System.out.println("SplashScreen.getSplashScreen() returned null");
            return;
        }

        Graphics2D g = splash.createGraphics();
        if (g == null) {
            System.out.println("g is null");
            return;
        }
        for(int i=0; i<100; i++) {
            renderSplashFrame(g, i);
            splash.update();
            try {
                Thread.sleep(90);
            }
            catch(InterruptedException e) {
            }
        }
        splash.close();
        setVisible(true);
        toFront();
    }
    public void actionPerformed(ActionEvent ae) {
        System.exit(0);
    }

    private static WindowListener closeWindow = new WindowAdapter(){
        public void windowClosing(WindowEvent e){
            e.getWindow().dispose();
        }
    };

    public static void main (String args[]) {
        SplashDemo test = new SplashDemo();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是输出:

Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - unreported exception java.net.MalformedURLException; must be caught or declared to be thrown
    at misc.SplashDemo.main(SplashDemo.java:103)
Java Result: 1
BUILD SUCCESSFUL (total time: 4 seconds)
Run Code Online (Sandbox Code Playgroud)

什么也没有发生。

PS:我是 Java 的初学者,我使用的是 NetBeans IDE 7.2.1

mos*_*o-x 5

启动画面可以在应用程序启动时显示,在 Java 虚拟机 (JVM) 启动之前。

Swing/AWT 显示第一个窗口后,闪屏窗口会自动关闭(也可以使用 Java API 手动关闭,见下文)。

如果您的应用程序打包在一个 jar 文件中,您可以使用

清单文件中的SplashScreen-Image选项以显示启动画面。
将图像放在 jar 存档中并在选项中指定路径。
路径不应有前导斜杠。例如,在 manifest.mf 文件中:

 Manifest-Version: 1.0
 Main-Class: Test
 SplashScreen-Image: filename.gif
Run Code Online (Sandbox Code Playgroud)

SplashScreen 类提供用于控制启动画面的 API。这个类可用于

  • 关闭启动画面
  • 更改启动画面图像
  • 获取初始屏幕本机窗口位置/大小
  • 在启动画面中绘画。

它不能用于创建启动画面。

  • 这个类不能被实例化。
  • 该类只能存在单个实例,可以使用 getSplashScreen() 静态方法获取。

如果在应用程序启动时未通过命令行或清单文件选项创建启动画面,

getSplashScreen 方法返回 null。

那么你的代码有什么问题?

不是

SplashScreen.setImageURL(link);
Run Code Online (Sandbox Code Playgroud)

好的

splash.setImageURL(link);
Run Code Online (Sandbox Code Playgroud)

错误的顺序:在你有一个飞溅对象之前设置 ImageUrl

URL link= new URL("http://docs.oracle.com/javase/tutorial/uiswing/examples/misc/SplashDemoProject/src/misc/images/splash.gif");
        SplashScreen.setImageURL(link);
        final SplashScreen splash = SplashScreen.getSplashScreen();
Run Code Online (Sandbox Code Playgroud)

正确:获取飞溅,然后设置 ImageUrl

短的

final SplashScreen splash = SplashScreen.getSplashScreen();
splash.setImageURL(link);
Run Code Online (Sandbox Code Playgroud)

long withcatch MalformedURLException摆脱错误
MalformedURLException : must be caught

final SplashScreen splash = SplashScreen.getSplashScreen();
if (splash == null) {
       System.out.println("SplashScreen.getSplashScreen() returned null");
            return;
   }
URL link;
   try {
        link = new URL("http://docs.oracle.com/javase/tutorial/uiswing/examples/misc/SplashDemoProject/src/misc/images/splash.gif");
       } catch (MalformedURLException ex) {
            System.out.println("MalformedURLException link:77");
            return;
       }
   try {
            splash.setImageURL(link);
       } catch (NullPointerException | IOException | IllegalStateException ex) {
            System.out.println("NullPointer or IO or IllegalState setImageUrl:85");
            return;
       }
Run Code Online (Sandbox Code Playgroud)

识别本地图像文件和互联网上的图像文件之间的区别。我制作了一个本地的蓝色 splash.gif 文件。

程序如下。

  • 本地图像已加载。(清单文件中的 SplashScreen-Image 选项)

在此处输入图片说明

在此处输入图片说明

  • 应用程序出现。

在此处输入图片说明


让它在 Netbeans 中工作

并不总是得到错误 SplashScreen.getSplashScreen() returned null

final SplashScreen splash = SplashScreen.getSplashScreen();
    if (splash == null) {
           System.out.println("SplashScreen.getSplashScreen() returned null");
Run Code Online (Sandbox Code Playgroud)

您必须执行以下操作。

在属性中指向您的本地 .gif 文件:-splash:src/misc/images/splash.gif

在此处输入图片说明