2010-05-24 47 views
1

我做了一个项目,显示了一个商店的库存库存。
在该清单中,软件应该将产品的数据与其图像一起存储。
有一个问题...
Bcz的大量股票,图像正在加载屏幕上花了很多时间。
所以,我想我应该给框架中的标签上会显示“加载软件”。
但现在当我设置可见=真的框架,但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(); 
     } 

如何在这种情况下显示一些消息,其他类正在加载或“加载软件”类的东西。

只为知道....这个类不是屏幕上的图像将加载。

回答

3
  1. 这是很难回答这个问题,因为它不是清楚是什么效果(Swing的明智)是调用new AddInventoryScreen();new showStock();的。您应该只触摸用户在最后看到的UI(当所有处理完成时)。

  2. 你应该真的分离出需要很长时间才能进入他们自己的Thread的方法(请参阅SwingWorker。Java 5.0还有其他选择)。这样,UI在处理时不会被阻塞。

  3. 也许你想要的是一个Splash Screen

1

尝试调用validate();pack();方法调用f.setVisible(true);

你的代码可以

validate(); 
pack(); 
f.setVisible(false); 
1

我觉得一个大问题在你的代码(也许不是然而唯一一个)是事实您应该使用不同线程进行长时间操作。

只能在“EDT”中执行GUI操作(创建摆动组件,将它们添加到面板,更改标签...),并且必须很短(通常小于100ms甚至50ms)。

如果您使用SwingWorker API(JDK 1.6的一部分),则可以通过另一个线程轻松完成长操作。