【问题标题】:.Jar will not run on Blogger.Jar 不会在 Blogger 上运行
【发布时间】:2023-03-13 18:09:01
【问题描述】:

我已经制作了我的文件,但无法让它在博客上运行。我查看了很多关于此的信息,但似乎无法让它运行。

我的代码有问题吗?总是会出现class not found的问题。

<applet 
    code = "Snake" 
    archive = "Snake.jar" 
    height=300 
    width=300 
    codebase="https://sites.google.com/site/zmchenryfilecabinet/filecabinet/">
</applet>

这是命令提示符中 jar tf Snake.jar 命令的输出:

META-INF/MANIFEST.MF
.classpath
Snake.class
Apple.class
applescaled.png
bodySprite.png
headSprite.png
apple.png
Snake.java
controlScreen.jpg
snakehead.png
endAnimation.gif
apple1.png
snakebody.png
.project

在清单中,我的类文件后面有一个空行,在清单中它显示:

Manifest-Version: 1.0
Main-Class: Snake

我的主课也以

开头
public class Snake extends JApplet{

【问题讨论】:

    标签: java security jar applet accesscontrolexception


    【解决方案1】:

    控制台输出

    当我打开下面的 HTML 时看到的一些控制台输出。

    ..
    security: SSV validation: running: 1.7.0_25, requested: null, range: null
    network: Created version ID: 1.7.0.25
    network: Created version ID: 1.7.0.25
    security: continue with running version
    basic: exception: java.lang.ExceptionInInitializerError.
    java.lang.RuntimeException: java.lang.ExceptionInInitializerError
        ... 
    Caused by: java.lang.ExceptionInInitializerError
        at Snake.<init>(Snake.java:37)
        ... 
    Caused by: java.security.AccessControlException: 
      access denied ("java.lang.RuntimePermission" "exitVM.0")
        ... 26 more
    basic: Removed progress listener: sun.plugin.util.ProgressMonitorAdapter@169a11f
    security: Reset deny session certificate store
    

    分析

    特别注意:

    at Snake.<init>(Snake.java:37)
    

    还有:

    ..AccessControlException: access denied ("java.lang.RuntimePermission" "exitVM.0")
    

    可能在Snake.java 的第 37 行代码正在执行以下操作:

    jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    

    这是不允许的,即使在受信任的小程序中也是如此。一个小程序可能与其他小程序共享一个虚拟机。

    如果我的预测正确,请尝试:

    jFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    

    否则,好吧.. 为了尽快获得更好的帮助,请发布SSCCE。或者至少是Snake.java 的前 37 行。 :)

    HTML

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    </head>
    <body>
    <h1>Applet</h1>
    <applet
        code = "Snake"
        archive = "Snake.jar"
        height=300
        width=300
        codebase="https://sites.google.com/site/zmchenryfilecabinet/filecabinet/">
    </applet>
    </body>
    </html>
    

    类缓存

    顺便说一句。如果您仍然在使用 NCDFE(以及一般的小程序开发)时遇到问题。

    要在开发期间绕过类/代码缓存,请务必在软件测试运行之间刷新 Java 控制台中的类缓存。

    【讨论】:

    • 我按照你说的做了,你说得对,它会加载应用程序,但它仍然会抛出 RuntimeException java.lang.NoClassDefFoundError: StdDraw。
    【解决方案2】:

    您是否创建了可执行 JAR?试试看here

    否则,如果您有 ClassNotFound 错误,则意味着您的 JAR 中缺少某些类。 你在你的项目中使用了一些库吗?如果是,请确保将它们提取到可执行 JAR 中。

    【讨论】:

    • 我终于得到了它来加载类文件。但是现在我收到一个错误 java.lang.NoClassDefFoundError: StdDraw 但 StdDraw 在我的构建路径中。有什么想法吗?
    • 您可能忘记将 StdDraw.java 放在当前工作目录中。尝试这样做并编译它。
    • 它包含在我的 src 文件夹中。我曾经将它作为 .jar 文件,但我下载了 .java 版本并将其包含在 src 文件夹中。不过,我仍然收到 NoClassDefFoundError。
    • jar 文件基本上是一个包含 *.class 文件的 zip 存档。在 Java 中,*.java 文件是包含源代码(人类可读)的文件,而 *.class 文件是 *.java 文件中代码的编译版本(计算机可读)。
    • 是的,我在构建路径中有 StdDraw,但它不应该工作。它编译得很好并且不会出错。我不明白我做错了什么。
    猜你喜欢
    • 1970-01-01
    • 2013-06-07
    • 1970-01-01
    • 2012-08-30
    • 2021-11-12
    • 1970-01-01
    • 2013-08-27
    • 2017-08-09
    • 2021-10-13
    相关资源
    最近更新 更多