Name: boT120536 Date: 01/25/2001
java version "1.3.0_01"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.0_01)
Java HotSpot(TM) Client VM (build 1.3.0_01, mixed mode)
This is a resubmission (Review ID: 113699)
1. Problem: The appletviewer in 1.3.0_01 does not work (class not found) when
presented with HTML that DOES work with the 1.3.0_01 Plug-in in Netscape
Navigator and Microsoft Internet Explorer.
2. Files: test.html, AppletDemo.java, test.bat
3. Environment: This code assumes a share "j:" which points to a web server
directory (in my case c:\InetPub\webroot) that contains the sub-directory
"test".
4. To illustrate bug: Copy the 3 files into a directory and run test.bat to
compile the application and run the appletviewer.
S:\x>test
S:\x>javac -deprecation AppletDemo.java
S:\x>jar cvf test.jar AppletDemo.class
added manifest
adding: AppletDemo.class(in = 4131) (out= 2229)(deflated 46%)
S:\x>copy test.jar j:\test
1 file(s) copied.
S:\x>copy test.html j:\test
1 file(s) copied.
S:\x>appletviewer http://localhost/test/test.html
load: class AppletDemo.class not found.
java.lang.ClassNotFoundException: java.io.FileNotFoundException:
http://localhost/test/AppletDemo/class.class
at
sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.jav
a:545)
at
java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:230)
at sun.applet.AppletClassLoader.getBytes(AppletClassLoader.java:218)
at sun.applet.AppletClassLoader.access$100(AppletClassLoader.java:41)
at sun.applet.AppletClassLoader$1.run(AppletClassLoader.java:137)
at java.security.AccessController.doPrivileged(Native Method)
at sun.applet.AppletClassLoader.findClass(AppletClassLoader.java:134)
at java.lang.ClassLoader.loadClass(ClassLoader.java:297)
at sun.applet.AppletClassLoader.loadClass(AppletClassLoader.java:108)
at java.lang.ClassLoader.loadClass(ClassLoader.java:253)
at sun.applet.AppletClassLoader.loadCode(AppletClassLoader.java:371)
at sun.applet.AppletPanel.createApplet(AppletPanel.java:579)
at sun.applet.AppletPanel.runLoader(AppletPanel.java:515)
at sun.applet.AppletPanel.run(AppletPanel.java:293)
at java.lang.Thread.run(Thread.java:484)
5. But type the same URL (http://localhost/test/test.html) into Internet
Explorer and the applet works fine.
6. File Listings
test.html
-----------------------------------------------------------------------------
<HTML>
<HEAD>
<TITLE>BB</TITLE>
</HEAD>
<BODY >
<table bgcolor="#c0c0c0">
<tr>
<td>
<object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" width="760" height="400">
<param name="type" value="application/x-java-applet;version=1.3">
<param name="code" value="AppletDemo.class">
<param name="cache_option" value="Plugin">
<param name="cache_archive"
value="test.jar">
</object>
</td>
</tr>
</table>
</BODY>
</HTML>
-----------------------------------------------------------------------------
AppletDemo.java
-----------------------------------------------------------------------------
/*
* Swing 1.1 version (compatible with both JDK 1.1 and Java 2).
*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.net.URL;
public class AppletDemo extends JApplet
implements ActionListener {
protected JButton b1, b2, b3;
protected static final String DISABLE = "disable";
protected static final String ENABLE = "enable";
protected String leftButtonFilename = "images/right.gif";
protected String middleButtonFilename = "images/middle.gif";
protected String rightButtonFilename = "images/left.gif";
private boolean inAnApplet = true;
URL codeBase; //used for applet version only
//Hack to avoid ugly message about system event access check.
public AppletDemo() {
this(true);
}
public AppletDemo(boolean inAnApplet) {
this.inAnApplet = inAnApplet;
if (inAnApplet) {
getRootPane().putClientProperty("defeatSystemEventQueueCheck",
Boolean.TRUE);
}
}
public void init() {
setContentPane(makeContentPane());
}
public Container makeContentPane() {
ImageIcon leftButtonIcon;
ImageIcon middleButtonIcon;
ImageIcon rightButtonIcon;
if (inAnApplet) {
URL leftButtonURL = getURL(leftButtonFilename);
URL middleButtonURL = getURL(middleButtonFilename);
URL rightButtonURL = getURL(rightButtonFilename);
leftButtonIcon = new ImageIcon(leftButtonURL);
middleButtonIcon = new ImageIcon(middleButtonURL);
rightButtonIcon = new ImageIcon(rightButtonURL);
} else {
leftButtonIcon = new ImageIcon(leftButtonFilename);
middleButtonIcon = new ImageIcon(middleButtonFilename);
rightButtonIcon = new ImageIcon(rightButtonFilename);
}
b1 = new JButton("Disable middle button", leftButtonIcon);
b1.setVerticalTextPosition(AbstractButton.CENTER);
b1.setHorizontalTextPosition(AbstractButton.LEFT);
b1.setMnemonic(KeyEvent.VK_D);
b1.setActionCommand(DISABLE);
b2 = new JButton("Middle button", middleButtonIcon);
b2.setVerticalTextPosition(AbstractButton.BOTTOM);
b2.setHorizontalTextPosition(AbstractButton.CENTER);
b2.setMnemonic(KeyEvent.VK_M);
b3 = new JButton("Enable middle button", rightButtonIcon);
//Use the default text position of CENTER, RIGHT.
b3.setMnemonic(KeyEvent.VK_E);
b3.setActionCommand(ENABLE);
b3.setEnabled(false);
//Listen for actions on buttons 1 and 3.
b1.addActionListener(this);
b3.addActionListener(this);
b1.setToolTipText("Click this button to disable the middle button.");
b2.setToolTipText("This middle button does nothing when you click it.");
b3.setToolTipText("Click this button to enable the middle button.");
//Add Components to a JPanel, using the default FlowLayout.
JPanel pane = new JPanel();
pane.add(b1);
pane.add(b2);
pane.add(b3);
pane.setBackground(new Color(255,255,204));
pane.setBorder(BorderFactory.createMatteBorder(1,1,2,2,Color.black));
return pane;
}
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals(DISABLE)) {
b2.setEnabled(false);
b1.setEnabled(false);
b3.setEnabled(true);
} else {
b2.setEnabled(true);
b1.setEnabled(true);
b3.setEnabled(false);
}
}
/* One day, JApplet will make this method obsolete. */
protected URL getURL(String filename) {
URL url = null;
if (codeBase == null) {
codeBase = getCodeBase();
}
try {
url = new URL(codeBase, filename);
} catch (java.net.MalformedURLException e) {
System.out.println("Couldn't create image: badly specified URL");
return null;
}
return url;
}
public static void main(String[] args) {
JFrame frame = new JFrame("Application version: AppletDemo");
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
AppletDemo applet = new AppletDemo(false);
frame.setContentPane(applet.makeContentPane());
frame.pack();
frame.setVisible(true);
}
}
-----------------------------------------------------------------------------
test.bat
-----------------------------------------------------------------------------
javac -deprecation AppletDemo.java
jar cvf test.jar AppletDemo.class
copy test.jar j:\test
copy test.html j:\test
appletviewer http://localhost/test/test.html
-----------------------------------------------------------------------------
(Review ID: 113844)
======================================================================
- relates to
-
JDK-4249438 appletviewer does not grant applet permissions if class file is inside a JAR
-
- Closed
-