Всегда ли целесообразно иметь основной метод в апплете? - PullRequest
1 голос
/ 27 сентября 2010

Я пытаюсь обернуть голову вокруг правил использования апплета. Я понимаю, что апплет не должен иметь метод main (вместо него можно использовать init()), но каждый пример кода, который предоставляет мой профессор, - это апплет с методом main, как в приведенном ниже коде.

Насколько я понимаю, нехорошо иметь основной метод в апплете из-за проблем безопасности, верно? Когда (если вообще) я должен использовать метод main в апплете?

Кроме того, мой профессор использует подобные апплеты, встроенные в презентацию PowerPoint, которую он может легко запустить во время своей презентации. Можно ли будет запустить такой апплет, который был встроен в презентацию PowerPoint, если бы апплет использовал inti() вместо main()? Я спрашиваю об этом, потому что не вижу никакой причины, по которой он использовал бы метод main в таком апплете, если только он не требовался для правильной работы апплета при внедрении в презентацию PowerPoint.

//EventDispatcherThreadDemo.java

import javax.swing.*;

public class EventDispatcherThreadDemo extends Japplet{

    public EventDispatcherThreadDemo(){
        add(new JLabel("Hi, it runs from an event dispatch thread"));
    }

    public static void main(Stirng[] args){

        SwingUtilities.invokeLater(new Runnable(){

            public void run(){
                JFrame frame = new JFrame("EventDispatcherThreadDemo");
                frame.add(new EventDispatcherThreadDemo());
                frame.setSize(200, 200);
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }

        });

    }

}

P.S. Это не имеет ничего общего с домашней работой, просто попытка узнать больше о апплетах.

Ответы [ 4 ]

4 голосов
/ 27 сентября 2010

Метод main не имеет никакого особого значения для апплета.

Ваш преподаватель включает его вместе с несколькими строками для запуска класса в JFrame, чтобы иметь возможность запускать его также из командной строки с помощью простой команды "java foobar".Это в отличие от необходимости запуска команды «appletviewer foobar», которая может иметь проблемы с запуском из другой программы, такой как PowerPoint.это не дает полной среды Апплета, но демонстрационные программы могут быть настолько простыми, это не имеет значения.

Почему он решил сделать это вместо того, чтобы просто представить вам большую страницу HTML с апплетамиво, я не знаю.

3 голосов
/ 27 сентября 2010

Функция main () не имеет последствий для безопасности для апплета, поскольку она не вызывается контейнером апплета.Даже если бы это было так, апплет все равно будет ограничен изолированной программной средой безопасности.

OTOH, разработка гибридного апплета / приложения может иметь большой смысл.Традиционно приложения на основе фреймов.было легче разрабатывать и отлаживать, чем апплеты.

Это также может иметь смысл, если вы хотите предложить обе формы конечному пользователю.;)

См. пример гибрида , который может помочь продемонстрировать.

2 голосов
/ 27 сентября 2010

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

Метод жизненного цикла апплета и метод main являются примером upcalls.Как и слушатели, они должны быть короткими, извлекать необходимую информацию, инкапсулировать обработку upcall и вызывать метод для объекта, который имеет значение для этого объекта (в частности, не обременен зависимостью от upcall).

1 голос
/ 27 сентября 2010

На самом деле - это как минимум одна проблема безопасности. Предположим, ваш апплет:

  1. Подписано
  2. В методе main оставлен отладочный код, который делает что-то потенциально опасное, например, запись в файл

Затем злоумышленник может создать дескриптор приложения Java Web Start , который указывает на ваш файл .jar и запускает ваш метод main с полными привилегиями.

Эту конкретную атаку можно защитить, добавив в свой файл .jar пустой файл с именем JNLP‑INF/APPLICATION.JNLP. Но могут быть и другие возможные атаки, поэтому я думаю, что ваш профессор прав, чтобы избежать этого.

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