Как получить простой Java-апплет Hello World для работы в браузере в Mac OS X? - PullRequest
2 голосов
/ 06 февраля 2009

Я использую Java SE 1.6 на Mac OS X 10.5.6. Код для моего апплета выглядит следующим образом:

import java.awt.Graphics;
import javax.swing.JApplet;

public class HelloWorld extends JApplet {

    public void paint( Graphics g ) {
            super.paint( g );
            g.drawString( "Hello World!", 25, 25 );
    }

}

Я скомпилировал это в файл .class . Код для моего HTML-файла выглядит следующим образом:

<html>

<head>
    <title>Hello World</title>
</head>

<body>
    <applet code="HelloWorld.class" height="300" width="300">
            Your browser is ignoring the applet tag.
    </applet>
</body>

</html>

Если я запускаю апплет с appletviewer , он работает нормально. Однако, если я открою HTML-файл в браузере, появится квадрат для пространства апплета, но апплет не загружается. («Ваш браузер игнорирует тег апплета». Также не отображается.) В строке состояния браузера отображаются два сообщения: Апплет HelloWorld не загружен и Загрузка Java Applet Failed ... Я попробовал апплет с Firefox 3.0.6, Safari 3.2.1 и Opera 9.6.3. Никто из них не мог загрузить апплет.

Если я попытаюсь открыть HTML-код для одного из демонстрационных апплетов Java в / Developer / examples / Java / Applets , он нормально загрузится во всех трех браузерах.

Есть ли что-то, чего мне здесь не хватает при попытке загрузить этот простой апплет в браузере?

Ответы [ 9 ]

2 голосов
/ 06 февраля 2009

К сожалению, Apple решила выпустить только 64-битную ВМ для Java 6 на OS X. Смысл этого заключается в том, что браузеры должны быть связаны как 64-битные приложения. Прямо сейчас, никто из них не делает (насколько я знаю). Таким образом, «простое» решение - использовать Java 5 для апплетов, которые вы можете настроить в приложении Java Preferences.

2 голосов
/ 06 февраля 2009

Вы не указываете свойство codebase в теге апплета, поэтому я предполагаю, что ваш класс не может быть найден.

Попробуйте включить окно вывода консоли Java. Вы можете сделать это в «Java Settings» (использовать прожектор) на вкладке расширенных опций (с деревом и множеством флажков). Может быть, вы можете увидеть больше информации (например, ClassNotFoundException) там. Установите параметр «Включить / Показать консоль». Затем он должен появиться при запуске апплета.

1 голос
/ 15 мая 2010

Фил, комментарий о кодовой базе от dhiller вызвал что-то, что сработало для меня. Если вы поместите файл «HelloWorld.class» в ту же папку, что и файл HTML, а затем установите для тега апплета значение: < applet code="HelloWorld.class" codebase="." align="baseline" height="300" width="300" >, а затем откройте файл HTML в браузере, он должен работать. Мой сделал. codebase ="." сообщает браузеру, что код апплета находится в той же папке, что и файл HTML. Загрузка апплета не удалась, потому что браузер явно не знает, где находится код класса.

0 голосов
/ 08 мая 2013

Вот ваш ответ

<html>
   <applet code="packagename.HelloWorld.class" height="300" width="300">
</html>

Замените имя пакета на ваш пакет ..

0 голосов
/ 16 ноября 2010

Не помещайте цитаты вокруг имени вашего класса в HTML-файл. Каждый раз, когда я ставлю цитаты, апплет никогда не работает для меня. :)

0 голосов
/ 09 августа 2010

Просто заметка. Эта ветка помогла мне встать на путь, поэтому я просто хотел бы добавить полезную заметку. 9 августа 2010 года.

В Mac OS X 10.5.8 Leopard используемая версия Java управляется приложением по пути Mac HD / Приложения / Утилиты / Настройки Java

Что, возможно, раньше называлось настройками Java? Версия Java, используемая для настольного приложения, не обязательно должна совпадать с версией браузера. У меня возникла проблема с запуском Portecle (из командной строки) - он сообщал «Неверный номер версии в файле .class».

По состоянию на август 2010 г. последовательность Java по умолчанию для Mac OS X 10.5.8:

  • J2SE 5.0 ....... 32 бита
  • J2SE 5.0 ....... 32 бита
  • Java SE 6 ..... 64 бит
  • J2SE 5.0 ....... 64 бит
  • J2SE 1.4.2 ... 32 бита

Очевидно, что приложению Java, которое я пытался загрузить, требовалось 64-битное Java SE 6, потому что перетаскивание Java SE 6 в верхнюю часть этого списка сразу решило проблему, и после этого Portecle можно было запустить из командной строки или с помощью двойной строки. -click или portecle.jar. (ура)

0 голосов
/ 07 февраля 2009

Спасибо за все ваши ответы. Некоторые из них указали мне правильное направление, чтобы выяснить источник проблемы.

Я включил консоль Java в настройках Java. Когда я снова запустил апплет, я получил следующий вывод:

Плагин Java 1.5.0
Использование JRE версии 1.5.0_16 Java HotSpot (TM) Client VM
Плагин MRJ для Mac OS X v1.0.1
[запуск Java Applet Security @ Пт 6 февраля 23:47:20 CST 2009]
java.lang.UnsupportedClassVersionError: Неверный номер версии в файле .class
at java.lang.ClassLoader.defineClass1 (собственный метод)
at java.lang.ClassLoader.defineClass (ClassLoader.java:675)
в java.security.SecureClassLoader.defineClass (SecureClassLoader.java:124)
at sun.applet.AppletClassLoader.findClass (AppletClassLoader.java:177)
at java.lang.ClassLoader.loadClass (ClassLoader.java:316)
at sun.applet.AppletClassLoader.loadClass (AppletClassLoader.java:119)
at java.lang.ClassLoader.loadClass (ClassLoader.java:251)
at sun.applet.AppletClassLoader.loadCode (AppletClassLoader.java:605)
at sun.applet.AppletPanel.createApplet (AppletPanel.java:723)
at sun.plugin.AppletViewer.createApplet (AppletViewer.java:1864)
at jep.AppletFramePanel.createApplet (AppletFramePanel.java:189)
at sun.applet.AppletPanel.runLoader (AppletPanel.java:652)
at sun.applet.AppletPanel.run (AppletPanel.java:326)
на jep.AppletFramePanel.run (AppletFramePanel.java:176)
at java.lang.Thread.run (Thread.java:613)

Я установил Java SE 1.6 на свой Mac, но, думаю, он не установил плагин 1.6. Кроме того, создается впечатление, что файлы .class помечаются номером версии при их создании. Я скомпилировал этот апплет с версией 1.6, но попытался запустить его с плагином 1.5, что привело к UnsupportedClassVersionError . Я перекомпилировал апплет с версией 1.5 и снова попытался запустить его во всех трех браузерах. Работал как шарм.

Кто-нибудь знает, работает ли плагин 1.6?

0 голосов
/ 06 февраля 2009

Вы не даете апплету контейнер и т. Д., Чтобы показать себя. Вот пример апплета HelloWorld :

/*
  File.......: MyHello_JApplet.java
  Description: Basic JApplet example.  (Run by a browser.)
  Programmer.: Michael Thomas
  Date.......: Updated 09/09/01, Orig 09/09/01

*/
import javax.swing.JApplet;
import java.awt.Graphics;
import java.awt.Container;
import java.awt.Color;

public class MyHello_JApplet extends JApplet {

  public void init() {
    Container objContainer = super.getContentPane();
    objContainer.setBackground( Color.white );
  }
  public void paint(Graphics g) {
    g.drawString("Hello World from JApplet (Swing - JApplet).",10,25);
  }
}
0 голосов
/ 06 февраля 2009

Я не специалист по веб-программированию, но я думаю, что тег апплета не является стандартным. Вы должны использовать тег объекта с соответствующим classid для вставки апплета (или почти чего угодно).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...