在applet中使用main方法是否合适?

时间:2010-09-26 22:47:10

标签: java applet

我试图围绕applet使用的规则。我意识到applet不必有一个main方法(它可以使用init()代替),但我教授提供的每个代码示例都是一个带有main方法的applet,如下面的代码所示。

我的理解是,由于安全问题,在applet中使用main方法不是一个好主意,这是正确的吗?什么时候(如果有的话)我应该在applet中使用main方法?

另外,我的教授正在使用这样的applet嵌入到PowerPoint演示文稿中,然后他可以在演示期间轻松运行。如果小程序使用inti()而不是main(),是否仍然可以运行这样嵌入到PowerPoint演示文稿中的小程序?我问这个因为我看不出有什么理由说他会在这样的applet中使用main方法,除非applet在嵌入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 个答案:

答案 0 :(得分:4)

main方法对applet没有任何特殊含义。

你的教授将它与几行一起包含在JFrame中启动类,以便能够通过简单的“java foobar”命令从命令行运行它。这与必须运行“appletviewer foobar”命令相反,该命令可能与从PowerPoint等其他程序启动时有问题。虽然它没有提供完整的Applet环境,但演示程序可能非常简单,无所谓。

为什么他选择这样做而不是仅向您展示包含小程序的大型HTML页面,我不知道。

答案 1 :(得分:3)

main()对applet没有安全隐患,因为它不是由applet容器调用的。即便如此,applet仍然只限于安全沙箱。

OTOH,开发混合applet /应用程序可以很有意义。传统的基于帧的应用程序。比applet更容易开发和调试。

如果您想要向最终用户提供这两种表单,这也是有意义的。 ;)

请参阅此example of a hybrid,这可能有助于演示。

答案 2 :(得分:2)

不幸的是,许多示例代码都采用了不应遵循的捷径。这里的危险在于,学习者不能很好地模仿什么,不能做什么。

Applet生命周期方法和main方法是upcalls的示例。像听众一样,他们应该简短,提取必要的信息,封装上传的处理,并在对该对象有意义的对象上调用方法(特别是不受依赖于上调的阻碍)。

答案 3 :(得分:1)

实际上 至少存在一个安全问题。假设您的小程序:

  1. 已签名
  2. main方法中保留了调试代码,这些代码可以执行像写入文件一样的潜在危险
  3. 然后,攻击者可以创建指向.jar文件的Java Web Start应用程序描述符,并以完全权限启动main方法。

    通过在.jar文件中添加名为JNLP‑INF/APPLICATION.JNLP文件,可以防止此特定攻击。但是可能还有其他可能的攻击,所以我认为你的教授应该避免它。