| Other | 
|---|
| 1.4.2_04 04Fixed | 
| Duplicate :   | |
| Duplicate :   | |
| Duplicate :   | |
| Duplicate :   | |
| Duplicate :   | |
| Duplicate :   | |
| Relates :   | |
| Relates :   | |
| Relates :   | 
Name: jk109818			Date: 09/10/2002
FULL PRODUCT VERSION :
java version "1.4.0_01"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0_01-b03)
Java HotSpot(TM) Client VM (build 1.4.0_01-b03, mixed mode)
java version "1.4.1-rc"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1-rc-b19)
Java HotSpot(TM) Client VM (build 1.4.1-rc-b19, mixed mode)
FULL OPERATING SYSTEM VERSION :
all Windows OS
A DESCRIPTION OF THE PROBLEM :
a call to java.awt.Container.add can be very slow (about 3
seconds or even more) in Applets!
REGRESSION.  Last worked in version 1.3.1
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
1. compile source code
2. start html-file with the appletviewer
3. click on the "two" button
  (the center panel will become blue)
4. click on the "one" button
  it tooks about 3 seconds to switch the panel
  (see output to console)
EXPECTED VERSUS ACTUAL BEHAVIOR :
switch of the panels should simply be faster
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
/*
 * Java14test.java 1.0 02/09/10
 */
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
public class Java14test extends Applet implements ActionListener
{
  Panel p1 = new Panel();
  Panel p2 = new Panel();
  Panel p3 = new Panel();
  Button b1 = new Button("one");
  Button b2 = new Button("two");
  
  public void init()
  {
    setLayout(new BorderLayout());
    p1.setLayout(new BorderLayout());
    p1.add(BorderLayout.WEST, b1);
    p1.add(BorderLayout.EAST, b2);
    p2.setLayout(null);
    p3.setLayout(null);
    p2.setBackground(Color.yellow);
    p3.setBackground(Color.blue);
    p1.add(BorderLayout.CENTER, p2);
    add(BorderLayout.CENTER, p1);
    b1.addActionListener(this);
    b2.addActionListener(this);
  }
  public void actionPerformed(ActionEvent ae)
  {
    Object obj = ae.getSource();
    if (obj == b1)
    {
      long time1 = System.currentTimeMillis();
      p1.removeAll();
      long time2 = System.currentTimeMillis();
      p1.add(BorderLayout.WEST, b1);
      long time3 = System.currentTimeMillis();
      p1.add(BorderLayout.EAST, b2);
      long time4 = System.currentTimeMillis();
      p1.add(BorderLayout.CENTER, p2);
      long time5 = System.currentTimeMillis();
      invalidate();
      long time6 = System.currentTimeMillis();
      p2.repaint();
      long time7 = System.currentTimeMillis();
      validate();
      long time8 = System.currentTimeMillis();
      System.out.println("<<<<< Change-Status:");
      System.out.println("removeAll: " + (time2-time1)+"ms");
      System.out.println("add button1: " + (time3-time2)+"ms");
      System.out.println("add button2: " + (time4-time3)+"ms");
      System.out.println("add Panel 1: " + (time5-time4)+"ms");
      System.out.println("showing    : " + (time8-time5)+"ms");
      System.out.println("all        : " + (time8-time1)+"ms");
    }
    else if (obj == b2)
    {
      long time1 = System.currentTimeMillis();
      p1.removeAll();
      long time2 = System.currentTimeMillis();
      p1.add(BorderLayout.WEST, b1);
      long time3 = System.currentTimeMillis();
      p1.add(BorderLayout.EAST, b2);
      long time4 = System.currentTimeMillis();
      p1.add(BorderLayout.CENTER, p3);
      long time5 = System.currentTimeMillis();
      invalidate();
      long time6 = System.currentTimeMillis();
      p3.repaint();
      long time7 = System.currentTimeMillis();
      validate();
      long time8 = System.currentTimeMillis();
      System.out.println("<<<<< Change-Status:");
      System.out.println("removeAll: " + (time2-time1)+"ms");
      System.out.println("add button1: " + (time3-time2)+"ms");
      System.out.println("add button2: " + (time4-time3)+"ms");
      System.out.println("add Panel 2: " + (time5-time4)+"ms");
      System.out.println("showing    : " + (time8-time5)+"ms");
      System.out.println("all        : " + (time8-time1)+"ms");
    }
  }
}
<html>
<applet code=Java14test.class
    height=150 width=200>
</applet>
</html>
---------- END SOURCE ----------
CUSTOMER WORKAROUND :
use CardLayout instead of removing old panel
and adding new one
Release Regression From : 1.3.1_04
The above release value was the last known release where this 
bug was known to work. Since then there has been a regression.
(Review ID: 164280) 
======================================================================
| 
 |