当前位置: 首页 > 面试题库 >

我如何使用SplashScreen而不抛出NullPointerException?

常培
2023-03-14
问题内容

不管我怎么努力,SplashScreen.getSplashScreen()就是 永远 null

通过在线搜索,我发现这是一个常见问题,并且与不提供SplashScreen要使用的图像有关…因此,在浏览我认为setImageURL(URL)应该使用的方法时。这仍然无法正常工作。

在SO上也有类似的问题,例如this,它没有帮助,似乎建议使用无数的插件或从扩展到从头开始创建此类Frame。甚至Oracle教程都是含糊的,并且没有概述SplashScreen正确使用中的每个逻辑步骤…

如果不可能或不必要地难以使用,SplashScreen,还有其他选择吗?还是有人破解了解决此问题的简单方法

这是我的尝试:

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

问题答案:

看看如何创建启动画面

您需要通过命令行或Jar清单提供图像

更新一些基本知识

您必须为启动屏幕提供图像。如果不这样做,它将始终为null。

有两种方法可以做到这一点

1.从命令行

java -splash:path/to/image.jpg {other command line options}

该映像必须位于应用程序的类加载器的上下文中(例如嵌入式资源)。

2.清单文件

这有点困难,但是会导致执行简单得多(因为没有人需要记住添加命令行;))…

请查看使用清单文件以获取更多详细信息。

如何创建它取决于您的环境。

例如,在Netbeans中,您可以在Application节点下的项目属性对话框中设置初始屏幕属性。



 类似资料:
  • 我试图抛出一个自定义的异常(即400与一些错误消息)从Spring引导控制器,不知何故它总是抛出500而不是 我创建了一个异常处理程序来处理从控制器调用的服务引发的自定义异常,该控制器假定返回400。当我调试它时,我可以看到它实际上已被调用,但它没有作为响应直接抛出,如果我进行调试,我可以看到BasicErrorController仍将被调用(我认为不应该这样,因为我有一个自定义的异常处理程序,请

  • 问题内容: 我正在用Java编写程序,而我的一个类中的几乎每个方法都写成: 有没有办法让我摆脱为每个方法键入AWTException的额外步骤,而对整个类则这样做呢? 问题答案: 抱歉,没有。在Java中无法做到这一点。

  • 我在服务层的spring-boot应用程序中使用了Hystrix(Camden.sr7版本),而没有回退方法。Service的方法之一如下所示: 对于这样的响应,不清楚实际上是从哪个方法抛出异常的。如果我将版本更改为brixton.sr5(以前的版本),它将返回清晰的响应: 因此Hystrix的新版本(实际上是spring-cloud-dependencies的新版本)不会抛出HystrixRun

  • 如何使用JUnit5测试抛出NullPointerException的方法。但是我在方法中捕获到了这个异常,因此test以错误结尾:“Expected java.lang.NullPointerException to be thrown,But nothing was thrown”。 谢谢

  • 问题内容: 因此,基本上在我的游戏中,我需要抛掷或扔出一个物体。到目前为止,我有一个精灵,可以拖动它,但是不能抛出它。游戏的想法是扔一个精灵与另一个精灵碰撞。我想要一个我们称之为testNode的精灵,以移动用户将其扔到何处 意思是,当我释放精灵时,我希望它沿我移动它的方向继续。我花了很长时间尝试解决这个问题,但我做不到。我正在使用SpriteKit for iOS 8+。如果有人可以帮忙,请做。

  • 既然我们可以在Javascript中使用关键字抛出任何东西,那么我们就不能直接抛出一个错误消息字符串吗? 有人知道这里面有什么陷阱吗? 让我对此添加一些背景:在JavaScript世界中,人们通常依赖参数检查而不是使用try-catch机制,因此只使用抛出致命错误是有意义的。不过,为了能够捕捉一些系统错误,我必须为我自己的错误使用一个不同的类,而不是创建错误的子类,我认为我应该只使用String。