Что такое Java Applet?

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

      }

    }

Как узнать IP адрес в апплете?

Вы можете использовать следующий код для получения IP адреса в апплете:



  String ip = (new Socket(getDocumentBase().getHost(), getDocumentBase().getPort()))

    .getLocalAddress().getHostAddress();

Как установить параметр апплета из яваскрипта?

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" обычно означает, что один из классов на сервере поврежден.

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

Как убрать сообщение с предупреждением об апплете?

Чтобы убрать данное сообщение, используйте .java.policy файл в пользовательской
домашней директории со следующим содержимым:

grant {
permission java.awt.AWTPermission "showWindowWithoutWarningBanner";
};

Могут ли апплеты читать переменные среды, и если нет, то какие?

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

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

Как открыть новый URL из апплета?

Вам нужно использовать:



getAppletContext().showDocument

     (new URL("http://www.whatever.com"));

Как сделать апплет, изображающий часы?

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


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

Страница 1 из 3123»