load: class MyApplet not found : java.lang.ClassNotFoundException. Why am i getting this,when the class file is there in the package?
Asked Answered
B

2

-1

I get the following exception when i try to run the applet :

load: class MyApplet not found.
java.lang.ClassNotFoundException: MyApplet
at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)
at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(Unknown Source)
at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source)
at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Unknown Source)
at sun.plugin2.applet.Plugin2Manager.createApplet(Unknown Source)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at java.io.BufferedInputStream.fill(Unknown Source)
at java.io.BufferedInputStream.read1(Unknown Source)
at java.io.BufferedInputStream.read(Unknown Source)
at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source)
at sun.net.www.http.HttpClient.parseHTTP(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at java.net.HttpURLConnection.getResponseCode(Unknown Source)
at sun.plugin2.applet.Applet2ClassLoader.getBytes(Unknown Source)
at sun.plugin2.applet.Applet2ClassLoader.access$000(Unknown Source)
at sun.plugin2.applet.Applet2ClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
... 9 more
Exception: java.lang.ClassNotFoundException: MyApplet

applet code :

import javax.swing.*;
import java.awt.*;

public class MyApplet extends JApplet {

public JFrame frame;
public JPanel panel;
public JButton button;

public void init() {
    frame = new JFrame();
    panel = new JPanel();
    button = new JButton("click me ");
    panel.setBackground(Color.RED);
    panel.add(button);
    frame.add(panel);
    frame.setSize(300,300);
    frame.setVisible(true);
}   
}

html code :

<applet code="MyApplet" codebase="AppletPackage" archive="JAR.jar" height="800" width="800">

JAR.jar file contains a package Appletpackage and this package contains a class file named MyApplet.class

enter image description here

Why do i get this exception ? Whare have i made the mistake ?

Basic answered 9/7, 2012 at 14:4 Comment(1)
If that setup is publicly available online, please provide a link to it.Engenia
E
2

The archive parameter is resolved relative to the codebase parameter. So in your case the plugin will look for a file MyApplet.class included in a file AppletPackage/JAR.jar.

You should change this to the following:

<applet code="AppletPackage.MyApplet" archive="JAR.jar" height="800" width="800">

This will resolve to AppletPackage/MyApplet.class inside JAR.jar in the same directory as the HTML file.

Engenia answered 9/7, 2012 at 14:49 Comment(7)
But I get this exception : java.lang.NoClassDefFoundError: AppletPackage/MyApplet (wrong name: MyApplet)Basic
Check whether you can access the jar file using your browser. Make sure the HTML file doesn't contain a <BASE HREF="…"> setting. The edit the location bar of your browser. replacing the part after the last / with JAR.jar. If that works, use e.g. WinRar to check that there is a file MyApplet.class inside a AppletPackage directory within that jar. I very much expect either of these to fail.Engenia
JAR.jar is accessible localhost:8084/poll/JAR.jar. poll is the name of the project . AppletPackage contains MyApplet.classBasic
are you able to do the same on your pc but inside a netbeans projectBasic
I don't use netbeans. But as the problem lies on the client side of the HTTP connection, its server side should be irrelevant. It should be possible to simply save the HTML to a file, drop that into the same directory as JAR.jar, and then open that file in a browser. It might be that the Java plugin prevents an applet from creating a frame, but in that case I'd expect a different exception.Engenia
thank you ! But can you please explain me the codebase attribute. What is it meant for ?Basic
@grassPro, in my understanding codebase is mainly intended for the case where you don't use a jar but instead have all the class files under some directory. In that case you'd have codebase refer to that directory, where the plugin will find subdirectories for packages and within those individual files for classes. As this requires a distinct HTTP GET request for each class, the use of jar files is more efficient under pretty much all circumstances, even without considering the compression of jar files. I wouldn't use codebase together with archive.Engenia
E
1

This is an attempt to address the error message reported in a comment to my first answer:

java.lang.NoClassDefFoundError: AppletPackage/MyApplet (wrong name: MyApplet)

Looking at the sources, I see that this “wrong name” error message is an indication of a mismatch between file name and class name. You claim that your class is inside AppletPackage, and the file name AppletPackage/MyApplet.class fits that. But the source code you quoted above didn't contain a line

package AppletPackage;

You should add that line, so that the class file contains the fully qualified name of the class. Then you should be able to load it.

Engenia answered 9/7, 2012 at 17:2 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.