在我的程序中,我想用启动画面启动它几秒钟,然后启动程序的第一帧......
但有两个问题。
首先出现启动画面但是应该显示在其中的照片不会出现
第二次飞溅结束时,第一帧开始,但没有。
这是我的代码......所以我需要知道这是什么问题?
public class Splash extends JWindow {
AbsoluteLayout absoluto;
AbsoluteConstraints absimage,absrra;
ImageIcon Image;
JLabel jlabel;
JProgressBar Barra;
public Splash(){
absoluto=new AbsoluteLayout();
absimage = new AbsoluteConstraints(0,0);
absrra = new AbsoluteConstraints(0,410);
jlabel=new JLabel();
Image=new ImageIcon("sales.png");
jlabel.setIcon(Image);
Barra=new JProgressBar();
Barra.setPreferredSize(new Dimension(410,10));
this.getContentPane().setLayout(absoluto);
this.getContentPane().add(jlabel,absimage);
this.getContentPane().add(Barra,absrra);
new Thread(){
public void run(){
int i=0;
while(i<101){
Barra.setValue(i);
i++;
try {
sleep(30);
} catch (InterruptedException ex) {
// Logger.getLogger(Splash.class.getName()).log(Level.SEVERE,null,ex);
}
}
System.exit(0);
}
}.start();
this.pack();
this.setLocationRelativeTo(null);
this.setVisible(true);
}
public static void main (String args[]) throws SQLException, ClassNotFoundException{
new Splash();
loginForm a =new loginForm();
a.setTitle("fram 1");
a.setSize(700,600);
a.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
a.setLocationRelativeTo(null);
a.setVisible(true);
}
}
答案 0 :(得分:2)
如果不知道更多,我会说你有各种各样的问题......
首先,这......
Image=new ImageIcon("sales.png");
ImageIcon(String)
需要一个文件(来自本地磁盘),这里你说的是图像必须存在于执行程序的同一目录中。如果图像是嵌入式资源,您将遇到麻烦。您需要提供URL
。
其次,我不知道AbsoluteLayout
是什么,但我怀疑这是一种方便的方式来说setLayout(null)
并且没有证据证明这一点,我会怀疑你没有提供标签的任何宽度/高度信息,意味着它将为0x0。
您可以查看this,了解使用JLabel
作为其他组件的支持容器的示例。
您还通过更新EDT的进度条来违反Swing的单线程规则。这是一个很大的,不,不。你实际上更善于使用SwingWorker
。
有关详细信息,请查看Concurrency in Swing。
以下几个相同问题的不同例子。
回答你问题的第二部分......
我会仔细看看System.exit(0);
...