【问题标题】:ClassNotFoundException in java applets?java小程序中的ClassNotFoundException?
【发布时间】:2015-12-20 05:01:44
【问题描述】:

我遇到了小程序问题,我已经坚持了好几个小时。我制作了一个在 Eclipse 中运行良好的简单计算器小程序。我还制作了一个包含我的计算器小程序的简单 html 文档(我已经对其进行了多次更改,您可以想象它会努力使其工作)。问题是,每当我在我的 html 文档上点击“用 firefox 打开”时,我都会收到以下错误:

现在,我知道这个问题以前在互联网上出现过,但是我已经在这么多论坛上搜索了这么多小时,但我仍然没有弄明白。

我尝试了很多方法来解决这个问题。

我已经尝试过启用使用 SSL 2.0 兼容的 ClientHello 格式。

我已尝试通过转到 Java 控制面板、单击 Internet 临时文件下的设置并单击删除文件来清理 Java 缓存。这些事情都没有做任何事情。

我还尝试将最初在 Eclipse 中的 java 类保存到记事本中的 .java 中,然后将它和小程序放在同一个目录中,但又什么也没做。

现在,我不再尝试移动 .java 文件,而是将 .html 文件移动到我所有代码所在的 src 文件夹中,如下图所示:

这个目录在我的工作空间中的 src

这是我的 html 代码,其中包含了 java 代码:

<html>
<head>
<title> Hello </title>
</head>
<body>
<APPLET code = "myappletclass.java" width = "400" height = "100"
alt = "Not working"
>
</APPLET>
</body>
</html>

这是我经过数百万次修改后的 html 代码,所以很可能我已经尝试过这种不同的形式(即没有 alt,或者使用小写的 APPLET ...),但我完全愿意接受所有建议.

这是与之配套的 java 代码:

import java.awt.*;
import javax.swing.*;

public class myappletclass extends JApplet {
 private double sum;

 public void init() { //started by the browser when the Java program   (myappletclass.class) is loaded and run by the browser. The programmer does not write a call to the init() method.

    double n1 = 0;
    double n2 = 0;
    boolean successone = false; //keeps try catch running
    while (!successone) {
        try {
            String fn = JOptionPane.showInputDialog("Enter first number:");  //Whatever they enter will be stored in string fn
            n1 = Double.parseDouble(fn);
             successone = true; //wont go through while loop because is true  now!

            sum += n1;
        }

        catch (Exception e) {
            JOptionPane.showMessageDialog(null, "ENTER A NUMBER", "Nu uh",  JOptionPane.WARNING_MESSAGE);

        }
    }
    boolean successtwo = false; //keeps try catch running
    while (!successtwo) {
        try {
            String sn = JOptionPane.showInputDialog("Enter second number:");      //Whatever they enter will be stored in string sn
            n2 = Double.parseDouble(sn);
            successtwo = true; //wont go through while loop because is true now!
            sum += n2;
        }

        catch (Exception e) {
            JOptionPane.showMessageDialog(null, "ENTER A NUMBER", "Nu uh",       JOptionPane.WARNING_MESSAGE);

        }
    }

}

public void paint(Graphics g) {
    super.paint(g); //call superclass of paint
    g.drawString("The sum is " + sum, 25, 25);
}
}

此时,我急切地想弄清楚这是如何工作的。同样,我花了无数个小时来弄清楚如何做到这一点,所以我真的非常感谢您对如何在 Firefox 中使用我的 html 文档显示我的小程序的建设性批评和反馈。很高兴收到您的来信,非常感谢。

使用命令提示符使用 APPLETVIEWER 进行编辑

我让它与appletviewer一起工作,但我这样做的全部目的是看看它在像firefox这样的真实浏览器中的样子,以及我所有的html和所有内容。相反,我得到的结果与仅在 eclipse 中运行它所得到的结果相同。

【问题讨论】:

  • myappletclass.java?使用“找不到类”...以及目录的屏幕截图。也许应该是myappletclass.class...此外,您不需要“覆盖”paint,您可以使用JLabel。您还使用 while 循环阻止了 EDT,这可能很有趣,为什么不只是在小程序上放置一些字段和一个按钮
  • @MadProgrammer 非常感谢您的反馈。但是,在我之前的尝试中,我已经尝试将 code = "myappletclass.java" 替换为 code = "myappletclass.class",但没有任何反应。
  • @MadProgrammer 另外,您所说的“您还用您的 while 循环阻塞了 EDT”是什么意思,如果您能解释一下,我将不胜感激 :)
  • Concurrency in Swing。您冒着阻塞负责管理用户输入(除其他外)的线程的风险
  • 好的,我让你的代码可以工作了。我将您的.class,html 文件放在同一个目录中,并且能够使用appletviewer 加载.html 文件(但我必须在同一个目录中)

标签: java html eclipse applet dir


【解决方案1】:

非常感谢 MadProgrammer 帮助我找出答案,避免我再浪费 10 个小时!这是我所做的:我需要在我的标签中添加一个 codebase = file://linkatbrowserbar。添加 file://blah/blah/blah 后,我遇到了一个安全弹出窗口,说我的安全性不允许这个小程序。然后,我进入安全性的 java 控制面板,并将 file://blah/blah/blah 添加到我可以传递给安全性的内容列表中。然后我通过浏览器打开它,就是这样!成功了!

另外请注意,您需要先在命令提示符下编译它以将其从 .java 转换为 .class。然后你就可以完成所有这些步骤了! :)

【讨论】:

    猜你喜欢
    • 2014-09-25
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 2015-06-09
    • 2015-05-28
    • 2014-03-04
    相关资源
    最近更新 更多