Java апплет — это Java программа, предназначенная для запуска внутри браузера с java-поддержкой.

Java апплеты скачиваются с веб-сервера и запускаются на веб-клиенте.

Обычно апплеты загружаются через сеть и не допускаются к чтению и записи файлов на клиентской файловой системе,
а также к открытию сетевых соединений, за исключением соединения к хосту, с которого апплет был загружен.

Также, апплетам, загруженным через сеть, не разрешается запускать другие программы на клиенте
и загружать библиотеки.

Этот механизм может использоваться для первоначальной загрузки маленького апплета с коротким временем загрузки,
показом пользователю сообщения и дальнейшей загрузкой большего апплета. Пример ниже показывает, как это сделать:



[HTML (testQuick.html)



<HTML><HEAD></HEAD><BODY>

<APPLET CODE="QLoader.class" 

        NAME="QLoader"

        HEIGHT=200 

        WIDTH=200>

<PARAM NAME="appletToLoad" VALUE="SecondApplet">

<PARAM NAME="SecondAppletParm" VALUE="Hello World">

</APPLET></BODY></HTML>



[JAVA source (QLoader.java)]



import java.applet.Applet;

import java.applet.AppletStub;

import java.awt.*;



public class QLoader extends Applet 

    implements Runnable, AppletStub {

  String appletToLoad;

  Thread appletThread;



  public void init() {

    appletToLoad = getParameter("appletToLoad");

    setBackground(Color.white);

    }



  public void paint(Graphics g) {

    g.drawString("Loading the BIG ONE ..."3030);

    



  public void run() {

    try {

      Class appletClass = Class.forName(appletToLoad);

      Applet realApplet = (Applet)appletClass.newInstance();

      realApplet.setStub(this);

      setLayoutnew GridLayout(1,0));

      add(realApplet);

      realApplet.init();

      realApplet.start();

      }

    catch (Exception e) {

      System.out.println);

      }

    validate();

    }



  public void start(){

    appletThread = new Thread(this);

    appletThread.start();

    }



  public void stop() {

    appletThread.stop();

    appletThread = null;

    }



  public void appletResizeint width, int height ){

    resizewidth, height );

    }

}



[SecondApplet.java for demonstration]



import java.awt.*;



  public class SecondApplet extends java.applet.Applet {

    TextField tf;

    public void init() {

      System.out.println("Starting Second applet");

      String s;

      tf = new TextField10 );

      addtf );

      s = getParameter("SecondAppletParm");

      tf.setText(s);

      }

    }

PARAM VALUE не может быть изменен во время выполнения, но может во время расположения. Яваскриптовые «entities»
могут быть использованы для установки вычисленных VALUES.

В этом примере, VALUES приходят из javascript переменной, javascript функции и javascript выражения.



<HTML><HEAD></HEAD><BODY>

<SCRIPT>

var jsVar = "Hello World from jsVar";



function jsFnct() {

  return "Hello World from jsFnct";

  }

  

</SCRIPT></HEAD><BODY>

<<APPLET CODE ="MyApplet.class" HEIGHT=100 WIDTH=400>

  <PARAM NAME="first"  VALUE="&{jsVar};">

  <param name="second" value="&{jsFnct()};">

  <param name="third" value="&{'hello world'.toUpperCase() + ' from js Expression'};">

</APPLET>

</BODY></HTML>

Первое, что JVM делает при загрузке класса, это проверяет, что первые 4 байта — это CA FE BA BE. Это и есть
«магические числа» и именно поэтому вы получаете эту ошибку. Вы пытаетесь загрузить файл, который
не является классом, и поэтому згрузчик классов JVM бросает данное исключение.

Удостоверьтесь, что вы скопировали файлы классов на сайт в бинарном режиме, а не в текстовом или ASCII.
Ошибка в браузере «cannot start applet … bad magic number» обычно означает, что один из классов на сервере поврежден.

Замените ваши файлы классов на веб-сервере, почистите кэш браузера и перезагрузите апплет.

Апплеты могут читать довольно много системных переменных с помощью:

String ss = System.getProperty(String key):

java.version
java.vendor
java.vendor.url
java.class.version
os.name
os.arch
os.version
file.separator
path.separator
line.separator

Апплетам запрещено читать следующие системные переменные:

java.home
java.class.path
user.name
user.home
user.dir

Следующий пример демонстрирует как реализовать апплет экранных часов.


import java.applet.*;

import java.awt.*;

import java.util.*;

import java.text.*;



public class MyClock extends Applet {

  MyPanel mp;

  public void init() {

    mp = new MyPanel(getParameter("format"));

    add(mp);

    }

  }



class MyPanel extends Panel {

  MyClockThread mct;

  Color b, f;

  SimpleDateFormat formatter;

  String previousDateText = "";

  String dateText;



  MyPanel(String df) {

    super();

    formatter = new SimpleDateFormat(df);

    validate();

    setBackground(new Color(0).black);

    setForeground(new Color(0).yellow);

    b = this.getBackground();

    f = this.getForeground();

    mct = new MyClockThread(this);

    mct.start();

    }



  public Dimension getPreferredSize() {

    return new Dimension

     (this.getFontMetrics(this.getFont()).stringWidth(getNow()) 2530);

    }



  public void paint(Graphics g) {

    if (g != null) {

       g.setColor(b);

       g.drawString(previousDateText,10,15);

       g.setColor(f);

       dateText = get