闪屏制作取Graphics2D报空指针

时间:2023-02-04 00:10:21
package shan;

import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.SplashScreen;


/**
 * 
 * 应用程序启动的初始化窗口
 * 
 * @author tfq
 * 
 *
 */

public class ViewSplashScreen extends Thread {

public void run() {

try {

// 通过SplashScreen.getSplashScreen(),获取SplashScreen对象

SplashScreen splash = SplashScreen.getSplashScreen();

// 通过splash.createGraphics()画图对象;

Graphics2D g = splash.createGraphics();//这句报异常

// 设置启动图片字体的颜色

g.setColor(Color.green);

// SplashScreen在屏幕的位置,大小

// g.drawString(splash.getBounds().toString(),10,30);

// 在第一张启动图片上写"视房宝"

g.drawString("视房宝", 10, 50);

// SplashScreen的大小,当前显示的图片

// g.drawString(splash.getImageURL().toString(),10,70);

// 刷新以上内容到屏幕

splash.update();

Thread.sleep(1000);

// 下面的代码是在SplashScreen上显示一个3D效果的字符串

g.setComposite(AlphaComposite.Clear);

// 1 以矩形填充画图区域

g.fillRect(0, 0, (int) splash.getSize().getWidth(), (int) splash
.getSize().getHeight());

// 更改显示的图片

splash.setImageURL(Main.class.getResource("/SplashTest/beauty.jpg"));

int x = 30, y = 100;

String author = "tfq";

g.setFont(new Font("TimesRoman", Font.PLAIN, 30));

g.setPaintMode(); // 3

for (int i = 0; i < 5; i++) {

g.setColor(new Color(200, 200, 0));

g.drawString(author, x + i, y + i - 1);

g.setColor(new Color(100, 100, 0));

g.drawString(author, x + i - 1, y + i);

}

g.setColor(Color.yellow);

g.drawString(author, x + 5, y + 5);

splash.update();

// 注意,这儿是sleep(10000),但实际上SplashScreen并没有显示10秒

Thread.sleep(10000);

} catch (Exception e) {

e.printStackTrace();

}

}

}

import java.awt.Dimension;

import javax.swing.JFrame;

public class Main {
public static void main(String[] args) {
new ViewSplashScreen().start();
try {
// 这儿决定SplashScreen显示时间长短.
Thread.sleep(3000);
} catch (Exception e) {
}
// 对于实际应用程序,这儿对应程序的初始化工作
JFrame frame = new JFrame("Java SE6 Splash Test");
frame.setPreferredSize(new Dimension(320, 240));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}

1 个解决方案

#1


建议你在那句上下个段点,空指针错,一般是指   对象.方法  中的  对象为空,你这边就是splash为空,那么应该是前面那句
SplashScreen.getSplashScreen(); 没取到值

#1


建议你在那句上下个段点,空指针错,一般是指   对象.方法  中的  对象为空,你这边就是splash为空,那么应该是前面那句
SplashScreen.getSplashScreen(); 没取到值