Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-4408538

V1.3.0_01 appletviewer fails to load class from JAR/UNC Path; plugin DOES work

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Won't Fix
    • Icon: P4 P4
    • None
    • 1.3.0_01
    • deploy
    • x86
    • windows_nt



      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)
      ======================================================================

            Unassigned Unassigned
            bonealsunw Bret O'neal (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: