小程序麻烦

时间:2011-08-23 05:04:24

标签: java html applet embed

我正在尝试在我的网站中嵌入一个小程序,但我不能因为上帝的爱而弄清楚为什么这不起作用!我有一个名为BHSurveyor.jar的JAR文件,我的类在javax.swing.JApplet扩展了bhs.gui.GUIApplet。现在,我已经尝试将其嵌入到页面中,并且我已尝试了

中的所有内容
<applet codebase="/dist/" archive="/dist/BHSurveyor.jar" code="bhs.gui.GUIApplet" width="256px" height="256px" />

(在本地打开的HTML文件中,JAR下面的一个文件夹级别)

<applet codebase="file://localhost/C:/Users/Supuhstar/Documents/NetBeansProjects/BHSurveyor/dist/" archive="file://localhost/C:/Users/Supuhstar/Documents/NetBeansProjects/BHSurveyor/dist/BHSurveyor.jar" code="bhs.gui.GUIApplet.class" width="256px" height="256px" />

及其所有排列,以及一些......但每一次,我都得到相同的红色“错误。点击查看详细信息”消息(没有提供详细信息)。 有人可以告诉我该怎么做吗?

我的设置


可以在http://s.supuhstar.operaunite.com/s/content/test/

查看我的设置的完整重新创建

测试


按照建议,我跑了

jar -tvf BHSurveyor.jar
'jar' is not recognized as an internal or external command,
operable program or batch file.

假设他们有别的意思,我试过

java -jar -tvf BHSurveyor.jar
Unrecognized option: -tvf
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

所以你看到这没有帮助......再次,从假设开始,我运行了这个并得到了我希望的预期输出:

"C:\Program Files\Java\jdk1.7.0\bin\jar" -tvf BHSurveyor.jar
     0 Mon Aug 29 11:56:10 EDT 2011 META-INF/
   228 Mon Aug 29 11:56:08 EDT 2011 META-INF/MANIFEST.MF
     0 Mon Aug 29 11:56:10 EDT 2011 bhs/
     0 Mon Aug 29 11:56:10 EDT 2011 bhs/gui/
  2264 Mon Aug 29 11:56:08 EDT 2011 bhs/AnswerType.class
  1851 Mon Aug 29 11:56:08 EDT 2011 bhs/DefPage.class
  1965 Mon Aug 29 11:56:10 EDT 2011 bhs/DefQuestion.class
  1463 Mon Aug 29 11:56:10 EDT 2011 bhs/DefTitlePage.class
  1338 Mon Aug 29 11:56:10 EDT 2011 bhs/Main.class
   615 Mon Aug 29 11:56:08 EDT 2011 bhs/Page.class
   786 Mon Aug 29 11:56:10 EDT 2011 bhs/Question.class
   402 Mon Aug 29 11:56:10 EDT 2011 bhs/TitlePage.class
  1757 Mon Aug 29 11:56:10 EDT 2011 bhs/Utils$1.class
   766 Mon Aug 29 11:56:10 EDT 2011 bhs/Utils$2.class
  6188 Mon Aug 29 11:56:10 EDT 2011 bhs/Utils.class
  3409 Mon Aug 29 11:56:10 EDT 2011 bhs/gui/GUIApplet.class
  1218 Mon Aug 29 11:56:10 EDT 2011 bhs/gui/GUIJFrame.class
  3549 Mon Aug 29 11:56:10 EDT 2011 bhs/gui/GUIPage.class
   824 Mon Aug 29 11:56:10 EDT 2011 bhs/gui/GUIQuestion$1.class
  8650 Mon Aug 29 11:56:10 EDT 2011 bhs/gui/GUIQuestion.class

Applet构造函数和init


  public GUIApplet(Page... pgs)// throws UnknownHostException
  {
    System.out.println("new GUIApplet(Page... " + pgs + ")");
//    System.out.println(java.net.InetAddress.getLocalHost().getHostAddress());
    System.out.println("  setting layout...");
    setLayout(new java.awt.GridBagLayout());

    System.out.println("  adding components...");
    addComponents();

    System.out.println("  initializing pages...");
    pages = new ArrayPP<>();

    System.out.println("  installing pages...");
    int i=1;
    for (Page p : pgs)
      if (p != null)
        installPage(p);
    System.out.println("  changing look-and-feel...");
    LookAndFeelChanger.setLookAndFeel(LookAndFeelChanger.NIMBUS);
    System.out.println("  fixing nav buttons...");
    fixNavButtons();
    System.out.println("GUIApplet complete");
  }

  public void init()
  {
    // TODO start asynchronous download of heavy resources
    System.out.println("GUIApplet.init()");
  }

3 个答案:

答案 0 :(得分:2)

你犯了几个错误。

  1. archive必须与代码库相关。这意味着如果你的jar位于dist文件夹下,你应该说:<applet codebase="/dist/" archive="BHSurveyor.jar"<applet codebase="/" archive="/dist/BHSurveyor.jar"(除非你的jar实际上在/dist/dist/BHSurveyor.jar下)
  2. 大多数applet标签示例显示它们在code属性的值中写入.class后缀,因此在您的情况下写:code =“bhs.gui.GUIApplet.class”(正如您在第二个示例中所做的那样代码库和存档似乎是完全错误的。
  3. 虽然大多数HTML元素在编写宽度和高度时都支持单位,但我从未见过applet支持单位,所以删除pxwidth="256" height="256"
  4. 使用Applet控制台。它可以从浏览器的菜单启动。可能你会在那里看到某种例外,它可以帮助你理解问题所在。

    如果这一切都无济于事,请执行以下操作。

    1. 使用appletviewer或使用IDE检查applet。确保它能够运行。
    2. 将它放在Web服务器下的某个位置,并手动检查其JAR文件的URL。您应该能够使用浏览器(或wget命令)下载jar。
    3. 如果这也不起作用,请转到http://download.oracle.com/javase/1.4.2/docs/guide/misc/applet.html,从此网站获取applet标记。试着理解它。将其复制/粘贴到您的HTML并使其正常工作。然后将codebase存档替换为你的并祈祷:)。
    4. 祝你好运。

答案 1 :(得分:2)

<applet 
    codebase="/dist/" 
    archive="/dist/BHSurveyor.jar" 
    code="bhs.gui.GUIApplet" 
    width="256px" 
    height="256px" />

将其更改为..

<applet 
    codebase="dist/" 
    archive="BHSurveyor.jar" 
    code="bhs.gui.GUIApplet" 
    width="256" 
    height="256" >
</applet>

注意:根据我的统计,这两个applet元素之间存在5个差异。


代码库

<applet 
    codebase="file://localhost/C:/Users/Supuhstar/Documents/NetBeansProjects/BHSurveyor/dist/" 
    ..

对该代码库绝对路径的仔细检查促使我做出进一步的评论。

我怀疑是否有任何这样的路径如图所示。将其复制/粘贴到浏览器地址栏并按Enter键(对于基于文件的路径,始终是一个很好的“酸性测试”)。

您是否获得目录列表?

我怀疑它应该是:

file:///C:/Users/Supuhstar/Documents/NetBeansProjects/BHSurveyor/dist/

(即没有localhost)。

对于代码库或类似路径中的初始/,也有特殊意义。它等同于“网站的根”。这意味着您的/dist/的其他代码库实际指向

file:///C:/dist/

您在浏览器中获得该路径的结果是什么?

顺便说一句 - 这些问题都不是夸夸其谈。为了最好地帮助你,我需要答案。


测试页面上的更新

  

可以在http://s.supuhstar.operaunite.com/s/content/test/

查看我的设置的完整重新创建

似乎BHSurveyor.jar包含文字,至少它是returning a content-type of text/html。控制台非常有用..

java.lang.reflect.InvocationTargetException
    at com.sun.deploy.util.DeployAWTUtil.invokeAndWait(Unknown Source)
    at sun.plugin2.applet.Plugin2Manager.runOnEDT(Unknown Source)
    at sun.plugin2.applet.Plugin2Manager.createApplet(Unknown Source)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.RuntimeException: java.lang.InstantiationException: bhs.gui.GUIApplet
    at sun.plugin2.applet.Plugin2Manager$12.run(Unknown Source)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$000(Unknown Source)
    at java.awt.EventQueue$1.run(Unknown Source)
    at java.awt.EventQueue$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.lang.InstantiationException: bhs.gui.GUIApplet
    at java.lang.Class.newInstance0(Unknown Source)
    at java.lang.Class.newInstance(Unknown Source)
    ... 15 more
Exception: java.lang.reflect.InvocationTargetException

在本地测试中更新applet

在本地下载Jar后,(遇到不同的错误,然后安装JDK 7进行修复),我终于可以看到你所描述的内容了。

  

“错误。点击查看详细信息”消息(未提供详细信息)。

  1. 首先,请注意您可以使用交叉编译选项在版本7 JDK中编译Java 1.5(或任何以前的版本)。一个方便的提示,知道什么时候进行部署。
  2. 但最重要的是......
    • applet init()方法中是否有任何try / catch语句? applet是否有(非默认)构造函数?如果是这样,同样的问题重新尝试/捕获。
    • 如果它不是太长或太私密,那么applet源的init()和构造函数部分的代码(复制/粘贴)是什么?
  3. 我的最新理论(关于applet加载的主要问题)是有try / catch语句吞咽或忽略异常。除此之外,我不知道为什么applet不会加载,但在Java控制台中没有显示任何相关的输出。

    顺便说一句,服务器返回Jar的错误内容类型的事实应该修复,尽管这似乎不是潜在的问题。

答案 2 :(得分:0)

你在寻找Java控制台吗?例如,在IE:Tools-&gt; Internet Options-&gt; Advanced中,您将看到启用控制台的选项。您可能会在那里看到一些有用的错误消息。