我试图在我的applet加载之前制作一些文本,所以我做了一个简单的SSCCE(.org):
import java.awt.*;
import javax.swing.*;
public class test extends JApplet {
public void init() {
this.add(new JLabel("Button 1"));
System.out.println("Hello world...");
try {
Thread.sleep(3000);
}catch(Exception hapa) { hapa.printStackTrace(); }
}
}
如果你运行它,按钮1将在3秒之后出现,当它假设出现之前......我做错了什么?
答案 0 :(得分:2)
我认为init()
方法必须在呈现项目之前返回。
答案 1 :(得分:1)
JustinKSU介绍了问题的技术部分。
更好的策略是在小程序出现之前使用image
param
来显示“启动”。有关详细信息,请参阅Special Attributes of Applets。
我想要一个固定的时间......而不仅仅是装载。
在这种情况下,在applet中放置一个CardLayout
。将'splash'添加到第一张卡,将GUI的其余部分添加到另一张卡。在init()
结束时创建一个非重复的Swing Timer
,它将使用主GUI切换到卡片。
E.G。
// <applet code='SplashApplet' width='400' height='400'></applet>
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class SplashApplet extends JApplet {
public void init() {
final CardLayout cardLayout = new CardLayout();
final JPanel gui = new JPanel(cardLayout);
JPanel splash = new JPanel();
splash.setBackground(Color.RED);
gui.add(splash, "splash");
JPanel mainGui = new JPanel();
mainGui.setBackground(Color.GREEN);
gui.add(mainGui, "main");
ActionListener listener = new ActionListener() {
public void actionPerformed(ActionEvent ae) {
cardLayout.show(gui, "main");
}
};
Timer timer = new Timer(3000, listener);
// only needs to be done once
timer.setRepeats(false);
setContentPane(gui);
validate();
timer.start();
}
}