我的目的是在一个登陆窗口和主界面之间显示一个闪屏效果,登陆 闪屏 和.主界面分别写在一个.java文件里,分别为咯Login.java;Splash.java,Mainframe.java现在的问题是如果我把闪屏这个.java文件单独运行可以显示得很正常
但是如果在login.java里调用这个闪屏就不能显示正常了,window窗口显示出来了,但是加载的图片没有显示出来闪屏我是通过在一个Window容器里加载一张图片来实现的

解决方案 »

  1.   

    不知道你是什么原因,我做的就很好,我的Splash   和 主窗口文件在同一文件夹下,图片放在这个文件夹的下一层文件夹resource里面,显示完全没有问题.
      

  2.   

    我是放在一个文件夹下的
    楼上的能共享一下你的源码让我看看吗?
    或者发到我邮箱[email protected],谢谢
      

  3.   

    我得代码如下import java.awt.*;
    import javax.swing.*;public class SplashFrame extends JFrame{
    public SplashFrame() {

    Image imgSplash = Toolkit.getDefaultToolkit().getImage("splash.png"); ImagePane pnlImage = new ImagePane(imgSplash);
    JWindow splashWindow = new JWindow(this);
    Container pane = JWindow.getContentPane();
    pane.add(pnlImage, BorderLayout.CENTER);
    Dimension scmSize = Toolkit.getDefaultToolkit().getScreenSize();
    int nImageWidth = imgSplash.getWidth(this);
    int nImageHeight = imgSplash.getHeight(this);
    splashWindow.setSize(nImageWidth, nImageHeight);
    splashWindow.setLocation(scmSize.width / 2 - nImageWidth / 2,
    scmSize.height / 2 - nImageHeight / 2);
    splashWindow.show();
    splashWindow.toFront();

    try {
    Thread.sleep(3000);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    this.dispose();
    } //public static void main(String[] args) {
    // SplashFrame frm = new SplashFrame();
    //}}class ImagePane extends JPanel {
    private Image imgSplash; public ImagePane(Image image) {
    MediaTracker mt = new MediaTracker(this);
    mt.addImage(image, 0);
    try {
    mt.waitForID(0);
    } catch (Exception e) {
    e.printStackTrace(); }
    this.imgSplash = image;
    } public void paint(Graphics g) {
    g.drawImage(imgSplash, 0, 0, this);
    } public Dimension getPreferredSize() {
    return new Dimension(imgSplash.getWidth(this), imgSplash
    .getHeight(this));
    }
    }当把这个当作一个独立的程序来运行,闪屏显示正常
    但是但我在另外LoginFrame.java里面new一个SplashFrame来显示就不能正常显示,只是显示一个灰白的Window窗体
      

  4.   

    不能直接sleep,要改成这样:final JWindow splashWindow = new JWindow(this);....
    ....new Thread() {
    public void run() {
    try {
    Thread.sleep(3000);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    splashWindow.dispose();
    }
    }.start();
      

  5.   

    to gtlang78()
    还是不行,我想应该不是这个问题,因为我单独运行SplahFrame就显示很正常,谢谢你
      

  6.   

    to  fire1_0(Steven) 
    我把图片文件和.java文件都放在一个目录的,应该不会找不到的
      

  7.   

    你在 LoginFrame.java里面是怎么调用 SplahFrame的?
      

  8.   

    LoginFrame.java源码如下:import java.awt.event.*;
    import javax.swing.*;class Adapter extends MouseAdapter { private final LoginPanel loginPane; /**
     *  
     */
    public Adapter(LoginPanel loginPane) {
    this.loginPane = loginPane;
    } public void mouseClicked(MouseEvent e) {
    ((JFrame) this.loginPane.getParent().getParent().getParent()
    .getParent()).dispose();
    this.loginPane.showSplash();
    }
    }class LoginPanel extends JPanel {
    public LoginPanel() { JLabel name = new JLabel("UserName:", SwingConstants.CENTER);
    JLabel password = new JLabel("PassWord:", SwingConstants.CENTER);
    JTextField txtName = new JTextField(20);
    JPasswordField txtPwd = new JPasswordField(20);
    JButton btnOK = new JButton("OK");
    JButton btnCancel = new JButton("Cancel");
    this.add(name);
    this.add(txtName);
    this.add(password);
    this.add(txtPwd);
    this.add(btnOK);
    this.add(btnCancel);
    btnOK.addMouseListener(new Adapter(this));
    btnCancel.addMouseListener(new MouseAdapter() {
    public void mouseClicked(MouseEvent e) { System.exit(0);
    } }); } /**
     *  
     */
    public void showSplash() {
    new SplashFrame();
    }
    private JButton btnOK; private JButton btnCancel;
    }
    public class LoginFrame extends JFrame { public LoginFrame() {
    setTitle("Login");
    setSize(350, 150);
    setLocation(300, 300);
    setResizable(false);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); getContentPane().add(new LoginPanel());
    /*UIManager.LookAndFeelInfo[] plafs = UIManager.getInstalledLookAndFeels();
    try {
    UIManager.setLookAndFeel(plafs[2].getClassName());
    SwingUtilities.updateComponentTreeUI(this);
    } catch (ClassNotFoundException e) {
    // TODO 自动生成 catch 块
    e.printStackTrace();
    } catch (InstantiationException e) {
    // TODO 自动生成 catch 块
    e.printStackTrace();
    } catch (IllegalAccessException e) {
    // TODO 自动生成 catch 块
    e.printStackTrace();
    } catch (UnsupportedLookAndFeelException e) {
    // TODO 自动生成 catch 块
    e.printStackTrace();
    }*/ } public static void main(String[] args) {
    JFrame loginframe = new LoginFrame();
    loginframe.show();
    }
    }