United StatesChange Country, Oracle Worldwide Web Sites Communities I am a... I want to...
JDK-6254441 : IFrame in Applet flickers

Details
Type:
Bug
Submit Date:
2005-04-13
Status:
Resolved
Updated Date:
2010-04-03
Project Name:
JDK
Resolved Date:
2005-07-26
Component:
deploy
OS:
windows_xp
Sub-Component:
deployment_toolkit
CPU:
x86
Priority:
P3
Resolution:
Fixed
Affected Versions:
1.4.2_07
Fixed Versions:
1.4.2_10 (b01)

Related Reports
Backport:
Backport:
Relates:
Relates:

Sub Tasks

Description
OS: Windows XP
Service Pack 2
Processor 1.5 GB 599 MHz, 992 MB RAM.
Installed JDK: j2sdk1.4.2_07

To compile:

1. Install the JDK1.4 and ensure the bin folder is in the system path
2. javac -classpath . TestApplet.java

To test:

1. Double-click on the index.html file to open in IE
2. Scroll down in the iframe and you'll see the flickering

-------------------
TestApplet.java
-------------------
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class TestApplet extends JApplet 
implements ActionListener
{
  public void start()
  {
    getContentPane().setBackground(Color.blue);
    getContentPane().setLayout(new BorderLayout());
    JButton b = new JButton("Do Nothing");
    b.addActionListener(this);
    getContentPane().add(b, BorderLayout.CENTER);
  }

  public void update()
  {
    System.out.println("Update");
  }

  public void actionPerformed(ActionEvent event)
  {
    System.out.println("Click");
  }
}

-------------------
index.html
-------------------
<html>
  <head>
    <title>TestApplet</title>
  </head>

  <body>
    <object
      classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
      codebase="j2re-1_4_2_03-windows-i586-p.exe#Version=1,4,2,3"
      id="Desktop"
      style="position:absolute; left:0; top:0; width:300; height:300; visibility:visible"
      hspace="0"
      vspace="0">

      <param name="code" value="TestApplet.class">
      <param name="codebase" value=".">
      <param name="type" value="application/x-java-applet;version=1.3">
      <param name="scriptable" value="true">
      <param name="mayscript" value="true">
	</object>

	<iframe id="Layer1" name="Layer1" style="position:absolute; left:210; top:10; width:280; height:280; visibility:visible;"
		frameborder="no" scrolling="auto" src="http://www.msn.com" application="yes">
	</iframe>

  </body>
</html>

###@###.### 2005-04-13 03:05:02 GMT

                                    

Comments
EVALUATION

the fix causes a regression bug 6367496
                                     
2006-01-04
EVALUATION

As stated in a related CR, there are too many background paint calls being made in the code. Look in the "WorkAround" section.

###@###.### 2005-05-19 22:19:45 GMT

In the "AxControl.cpp" file, there is a branch in the code which handles window resizing. This branch makes a call to the Windows API "SetWindowRgn". However, this call is made even when an overlapping IE embedded iframe is scrolled on top of an applet. As a result, the applet is unnecessarily being repainted during the scrolling. The fix is to replace the "SetWindowRgn" call with "GetUpdateRgn" call. This call only updates the dirty regions. In the case of iframe scrolling, there are no dirty regions so no repaint happens. This also maintains the original intent of the code branch, window resizing. When the window is resized, this API also takes care of repainting the dirty regions.
###@###.### 2005-07-18 18:35:06 GMT
                                     
2005-05-19
WORK AROUND

1) Bring up "Java Plug-In Control Panel" by clicking on the icon in Windows "Control Panel".
2) Click on the "Advanced" tab.
3) Go to the text field labeled "Java Runtime Parameters" and type in "-Dsun.awt.noerasebackground=true".
4) Push the "Apply" button and close "Java Plug-In Control Panel".
5) See if the problem still shows up. If it does, try rebooting Windows after the above instructions and try again.

###@###.### 2005-05-19 22:19:45 GMT
                                     
2005-05-19



Hardware and Software, Engineered to Work Together