首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >小程序故障

小程序故障
EN

Stack Overflow用户
提问于 2011-08-23 05:04:24
回答 3查看 1.3K关注 0票数 1

我正在尝试在我的网站嵌入一个小程序,但我不能为了上帝的爱,弄明白为什么这将无法工作!我有一个名为BHSurveyor.jar的JAR文件和我的类,它在bhs.gui.GUIApplet中扩展了javax.swing.JApplet。现在,我已经尝试过将它嵌入到一个页面中,并且尝试了所有从

代码语言:javascript
运行
复制
<applet codebase="/dist/" archive="/dist/BHSurveyor.jar" code="bhs.gui.GUIApplet" width="256px" height="256px" />

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

代码语言:javascript
运行
复制
<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/上查看我的设置的完整重新设计。

测试

按照建议,我跑了

代码语言:javascript
运行
复制
jar -tvf BHSurveyor.jar
'jar' is not recognized as an internal or external command,
operable program or batch file.

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

代码语言:javascript
运行
复制
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.

所以你看这个没用..。再一次,从假设出发,我运行了这个程序,得到了我希望得到的预期输出:

代码语言:javascript
运行
复制
"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

代码语言:javascript
运行
复制
  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()");
  }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-08-23 06:24:14

代码语言:javascript
运行
复制
<applet 
    codebase="/dist/" 
    archive="/dist/BHSurveyor.jar" 
    code="bhs.gui.GUIApplet" 
    width="256px" 
    height="256px" />

把它改成..。

代码语言:javascript
运行
复制
<applet 
    codebase="dist/" 
    archive="BHSurveyor.jar" 
    code="bhs.gui.GUIApplet" 
    width="256" 
    height="256" >
</applet>

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

代码库

代码语言:javascript
运行
复制
<applet 
    codebase="file://localhost/C:/Users/Supuhstar/Documents/NetBeansProjects/BHSurveyor/dist/" 
    ..

对这条代码基绝对路径的仔细研究促使我作了进一步的评论。

我怀疑是否有这样的道路,如所示。复制/粘贴到浏览器地址栏并点击enter (对于基于文件的路径总是一个很好的“acid测试”)。

你收到目录列表了吗?

我想应该是:

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

(即没有localhost)。

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

file:///C:/dist/

你在浏览器中得到的结果是什么?

顺便说一句,这两个问题都不是修辞问题。为了最好的帮助你,我需要答案。

在测试页面上更新

可以在http://s.supuhstar.operaunite.com/s/content/test/上查看我的设置的完整重新设计。

似乎BHSurveyor.jar包含文本,至少它是text/html。控制台非常有用。

代码语言:javascript
运行
复制
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中编译Java1.5(或其他以前的版本)。这是一个方便的提示,可以知道何时需要部署。
  2. 但最重要的是。
    • applet init()方法中是否有try/catch语句?applet有(非默认)构造函数吗?如果是这样的话,同样的问题是尝试/捕捉。
    • 如果它不是太长或太私密,那么小程序源代码的init()和构造函数部分的代码(复制/粘贴)是什么?

我的最新理论(关于applet加载的主要问题)是,有一些try/catch语句正在吞咽或忽略异常。除此之外,我不明白为什么applet不会加载,而不会在Java控制台中显示任何相关的输出。

顺便说一下,服务器为Jar返回错误的内容类型这一事实应该得到修正,尽管这似乎不是根本的问题。

票数 2
EN

Stack Overflow用户

发布于 2011-08-23 05:40:58

你犯了几个错误。

  1. archive必须相对于代码基。这意味着如果您的jar位于dist文件夹下,您应该说:<applet codebase="/dist/" archive="BHSurveyor.jar"<applet codebase="/" archive="/dist/BHSurveyor.jar" (除非您的jar实际上在/dist/dist/BHSurveyor.jar下面)。
  2. 大多数applet标记示例显示,它们在代码属性值中写入.class后缀,因此在您的示例中编写: code="bhs.gui.GUIApplet.class“(就像您在第二个示例中所做的那样,代码库和归档似乎完全错误。
  3. 虽然大多数HTML元素在写入宽度和高度时都支持统一,但我从未见过对于applet的支持,所以请删除pxwidth="256" height="256"

使用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中并使其正常工作。然后将代码库归档文件替换为您的,并祈祷:)。

祝好运。

票数 2
EN

Stack Overflow用户

发布于 2011-08-23 05:37:36

您在查看Java控制台吗?例如,在IE: Tools->Internet >Advanced中,您将看到一个启用控制台的选项。您很可能在那里看到一些有用的错误消息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7156481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档