我做了一个项目,显示了一家商店的库存
在该库存中,软件应该将产品的数据与其图像一起存储
有一个问题......
很多股票的Bcz,图像的屏幕正在加载需要花费很多时间
所以,我认为我应该给出标签上的框架,它将显示“加载软件”
但是现在当我为该帧设置visible = true时,但是该图像屏幕类加载问题的bcz我的帧没有正确显示。我放了screen shot,现在是我的代码。
JFrame f;
try{
f = new JFrame("This is a test");
f.setSize(300, 300);
Container content = f.getContentPane();
content.setBackground(Color.white);
content.setLayout(new FlowLayout());
JLabel jl = new JLabel();
jl.setText("Loading Please Wait....");
content.add(jl);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}catch(Exception e){
e.printStackTrace();
}
initComponents();
try {
addInverntory = new AddInventoryScreen();
showstock = new showStock(); // this class will take big time.
mf = new mainForm();
f.setVisible(false);
}catch (Exception ex) {
ex.printStackTrace();
}
在这种情况下,如何显示某些消息,其他类正在加载或“正在加载软件”。
只是为了知道......这个类不是图像加载的屏幕。
答案 0 :(得分:3)
很难回答这个问题,因为不清楚调用new AddInventoryScreen();
和new showStock();
的效果(Swing-wise)是什么。您应该只触摸用户最后看到的UI(完成所有处理后)。
你真的应该将需要很长时间的方法分解到自己的Thread中(参见SwingWorker。还有Java 5.0的替代方案)。这样,UI在处理时不会被阻止。
也许您想要的是Splash Screen?
答案 1 :(得分:1)
在致电validate();
pack();
和f.setVisible(true);
方法
您的代码可以是
validate();
pack();
f.setVisible(false);
答案 2 :(得分:1)
我认为您的代码中的一个大问题(可能不是唯一的问题)是您应该使用不同的线程进行长时间操作。
GUI操作(创建摆动组件,将它们添加到面板,更改标签......)将仅在“EDT”中执行,并且必须很短(通常小于100毫秒甚至50毫秒)。
如果您使用SwingWorker API(JDK 1.6的一部分),则可以通过其他线程轻松完成长时间操作。