我试图围绕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。这与家庭作业无关,只是想了解更多有关小程序的信息。
答案 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)
实际上 至少存在一个安全问题。假设您的小程序:
main
方法中保留了调试代码,这些代码可以执行像写入文件一样的潜在危险然后,攻击者可以创建指向.jar文件的Java Web Start应用程序描述符,并以完全权限启动main
方法。
通过在.jar文件中添加名为JNLP‑INF/APPLICATION.JNLP
的空文件,可以防止此特定攻击。但是可能还有其他可能的攻击,所以我认为你的教授应该避免它。