要做一个程序的启动画面,这段程序有错误嘛?

xiangcun 2004-09-01 10:35:12
运行时提示信息如下:
Uncaught error fetching image:

java.lang.NullPointerException

at sun.awt.image.URLImageSource.getConnection(URLImageSource.java:99)

at sun.awt.image.URLImageSource.getDecoder(URLImageSource.java:108)

at sun.awt.image.InputStreamImageSource.doFetch(InputStreamImageSource.java:248)

at sun.awt.image.ImageFetcher.fetchloop(ImageFetcher.java:172)

at sun.awt.image.ImageFetcher.run(ImageFetcher.java:136)


程序:
public class SpleshWindow extends JWindow {
private String statusStr =null;//信息窗口要显示的信息
private Image logoImg =null;//信息窗口中的显示图片
public SpleshWindow(JFrame owner) {//以JFrame对象为参数,可以是信息窗口和主窗口交互
super(owner);
//加载图片
logoImg=getToolkit().getImage( ClassLoader.getSystemResource("splesh.jpg"));
//this指的是什么
//等待图片加载完成
java.awt.MediaTracker tracker = new java.awt.MediaTracker(this);//创建一个MediaTracker对象
tracker.addImage(logoImg,0);//将图片放入MediaTracker对象中,序号是0
try{
tracker.waitForAll();
}catch(InterruptedException e){
e.printStackTrace();
}
//设置信息窗体在屏幕上的显示位置
setLocation(getToolkit().getScreenSize().width/2-logoImg.getWidth(this)/2,getToolkit().getScreenSize().height/2-logoImg.getHeight(this)/2);
setSize(logoImg.getWidth(this),logoImg.getHeight(this));//设置窗口大小
}


//设置显示信息的方法
public void setStatus(String status){
statusStr = status;
paint(getGraphics());//重画窗口来更新信息窗口中的显示信息
}

//重置Paint()方法来绘制图片和显示信息的方法
public void paint(Graphics g){
/**@ todo Override this java.awt.Component method
*/
super.paint(g);
//绘制图片
if(logoImg!=null)
g.drawImage(logoImg,0,0,this);
//绘制显示信息
if(statusStr!=null){
g.setColor(Color.red);
g.drawString(statusStr,240,getSize().height-250);
}
}
}
...全文
504 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiangcun 2004-09-02
  • 打赏
  • 举报
回复
还是coolcoot问的好,为什么会闪烁呢?我也不明白这个问题,请各位指教一下::::
还有啊 ,看起来像现有的应用程序这样好的启动界面还是挺难做的。
大家有什么好办法嘛?
xiangcun 2004-09-01
  • 打赏
  • 举报
回复
private Image logoImg =null;//信息窗口中的显示图片
logoImg=getToolkit().getImage( ClassLoader.getSystemResource("splesh.jpg"));
请问上边两句有问题吗?
我用icon也可以实现,就是用image不行,
还有,提示的错误的原因是什么

运行时提示信息如下:
Uncaught error fetching image:

java.lang.NullPointerException

at sun.awt.image.URLImageSource.getConnection(URLImageSource.java:99)

at sun.awt.image.URLImageSource.getDecoder(URLImageSource.java:108)

at sun.awt.image.InputStreamImageSource.doFetch(InputStreamImageSource.java:248)

at sun.awt.image.ImageFetcher.fetchloop(ImageFetcher.java:172)

at sun.awt.image.ImageFetcher.run(ImageFetcher.java:136)
casinosun 2004-09-01
  • 打赏
  • 举报
回复
logo.java

import javax.swing.*;
import java.lang.Runnable;
import java.awt.*;
public class Logo extends JWindow implements Runnable {
String filename; //Logo图像文件的文件名
public Logo(String name) {
filename = name;
}
public void run()
{
ImageIcon ig = new ImageIcon(filename);
JButton btn = new JButton(ig); //将图片给JButton显示
getContentPane().add(btn); //将显示图片的btn加到JPanel里
Toolkit kit = Toolkit.getDefaultToolkit();
Dimension screenSize = kit.getScreenSize(); //获得屏幕的大小
setLocation(screenSize.width/2-150, screenSize.height/2-100);//将Logo窗口显示在屏幕宽的1/4,高的1/4处
setSize(ig.getIconWidth(), ig.getIconHeight()); //将Logo窗口大小设成图像的大小
toFront(); //将Logo窗口显示为最前面的窗口
setVisible(true);
}
public void setNotVisible()
{
setVisible(false);
}
}



主程序
Logo lg =new Logo("splash.gif");
lg.run();
。。。。。。
。。。
lg.setNotVisible();
射天狼 2004-09-01
  • 打赏
  • 举报
回复
//这是主类的MAIN函数!!
public static void main (String args [])
{
/*有两种启动方法;
* 1. 用线程启动
* 2. 普通方法, 直接在本类中启动
*/
//方法1
//new thread().start();

//方法2
try
{
//UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");

JFrame.setDefaultLookAndFeelDecorated (true);
JDialog.setDefaultLookAndFeelDecorated (true);
splash myLogo = new splash ();//for creting an object
myLogo.show(); //show the logo
new frameApp();//for running the progam
myLogo.hide(); //hide the logo
myLogo = null; // no longer use it
}
catch (Exception e)
{
System.out.println(e.toString());
}
finally
{
System.out.println ("系统启动完毕!");
}
}
射天狼 2004-09-01
  • 打赏
  • 举报
回复
//这是闪烁窗口类

/*
* Created on 2004-8-10
*
* To change the template for this generated file go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
package frameApp;

/**
* @author Administrator
*
* To change the template for this generated type comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
import java.awt.*;
import javax.swing.*;

public class splash extends JWindow
{
splash()
{
JPanel panel = new JPanel()
{
//for painting the component
public void paintComponent(Graphics g)
{
//for getting the image
ImageIcon img = new ImageIcon(ClassLoader.getSystemResource ("frameApp/images/Logo.JPG"));
//for drawing the image
g.drawImage(img.getImage(), 0, 0, null);
super.paintComponent(g);
}
};

//for setting the border
panel.setOpaque(false);
//for setting the panel in the contentPane
panel.setBorder(BorderFactory.createEtchedBorder());
//for setting the ContentPane to true
setContentPane(panel);
//for setting the background
panel.setBackground(Color.black);

setSize(350, 250);
Dimension frameSize = getSize();
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);
setVisible(true);
}
}
紫黑蓝白 2004-09-01
  • 打赏
  • 举报
回复
不明白你所谓的闪烁窗口是什么东东,呵呵。


casinosun(姑苏慕容) (
这老兄的应该不会闪烁。

cuizm(射天狼) (
这老兄的可能是因为这句://for setting the background
panel.setBackground(Color.black);
所以闪烁。要不就是super.paint..调用顺序问题。




谁来说说为什么会闪烁啊?我也听听。呵呵。
xiangcun 2004-09-01
  • 打赏
  • 举报
回复
刚才的问题已经解决了,是路径错误。

于是又有了一个问题,:::::::
刚才的是闪烁启动画面,如果希望是一个不闪烁的启动画面,怎么做?

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧