我试图从它的单一输出.jar文件中运行applet,但是当我这样做时,它会在Firefox的屏幕底部显示“applet加载”,并且在java控制台中没有任何东西,但是没有显示在窗口的小程序.我之前在Firefox中有不同的错误,包括诸如“appletNotLoaded:ClassDefNotFoundError”之类的错误以及安全错误,但在我的java控制台中从来没有任何输出.这是applet的html文件:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title></title> <Meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <applet codebase ="." code="zuve.ZuveApplet.class" archive="ZuveApplet.jar" height="1000" width="1000"/> </body> </html>
其中zuve.ZuveApplet.class是我的main方法所在的位置,“ZuveApplet.jar”是输出jar文件的名称.这里是ZuveApplet.java,主要方法类:
package zuve; import vizster.Vizster; import vizster.VizsterLib; import java.applet.Applet; public class ZuveApplet extends Applet { public static final String DEFAULT_START_UID = "186297"; @Override public void init() { new Vizster(); } public static void main(String[] argv) { VizsterLib.setLookAndFeel(); //String startUID = argv.length > 0 ? argv[0] : DEFAULT_START_UID; String startUID = DEFAULT_START_UID; String file = argv.length > 0 ? argv[0] : null; new Vizster(startUID,file); } }
该小程序作为一个独立的(不嵌入在html中)运行得很好,但是我需要嵌入它. “Vizster”对象是JFrame的扩展,所以我想我应该能够创建一个它的实例并将其添加到一个小程序.这可能比这更复杂吗?
我很新奇的java和applets一般不幸的是.我已经看到很多关于源代码树结构的论坛帖子是一个问题,所以:
1)是否是使用多个包的问题?它们都在我的项目的src目录中.
2)有没有什么我需要放在我的java主目录?我知道很多人都有类路径问题,但是我正在使用一个现代的IDE,我认为这是为我照顾所有这些.
3)将项目导入到NetBeans Java Web应用程序项目中时,应该将applet作为.jar添加到项目中,还是应该添加整个项目?
4)最初当我创建这个小程序时,我只有几个源文件和一堆.jar库作为依赖关系,但是当我检查输出.jar时,我看到的是编译的源文件.库中没有文件的痕迹.这是怎么应该的?我注意到,如果我从其包含的文件夹移动输出.jar,它将无法再独立运行.我以为这个.jars应该是自足的,这不是真的吗?有什么我应该知道做一个可执行的jar吗?
5)在旁注中,html中applet标签中标示的小程序的大小是否与applet本身的大小完全相符?
对于巨大的职位,以及令人难以置信的模糊问题,我正在与一个没有人知道applet或Java的团队合作(我知道我们真正的辉煌).任何一种帮助或一般的建议将真的有帮助.
谢谢!
解决方法
<applet codebase ="." code="zuve.ZuveApplet.class" archive="ZuveApplet.jar,thing.jar,anotherThing.jar" height="1000" width="1000"/>
JFrame是顶级容器,因此您无法将其添加到您的applet中.您可以让您的小程序创建一个对象的实例,并让它打开自己的窗口.更灵活的方法是将对象重构为JPanel.作为JPanel,如果您还希望支持将其作为应用程序运行,则可以将其添加到JApplet或JFrame.
另请参阅JNLP,这样可以将代码部署为小程序或作为应用程序,并提供APIs进行打印和本地文件访问.功能不适用于简单的applet.