- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我提到了一个小演示。在 Setting up policies for an Applet embedded in HTML & 一位 Iced Tea JRE 用户评论说该演示。失败的为他们。他们拒绝小程序的许可(从而将其限制在沙盒中)并且应该看到绿色的“这个小程序是沙盒”页面。相反,小程序完全失败,他们看到了一个“灰色空间”小程序应该在的位置。
我正在等待它试图实例化一个 File
对象,这是不同之处。 IE。Sun/Oracle JRE 将毫无问题地允许它,只会抛出一个安全异常当小程序尝试创建 JFileChooser
时。 OTOH 冰茶 JRE 不允许要创建的文件
。
因此,这段代码应该可以解决这个问题。它移动了创建/添加JEditorPane
和第一个的安装在 new File(..)
调用之前显示“其他所有方法均失败”消息,然后是绿色的“沙盒”页面。
我的问题是。对于使用 Iced Tea JRE 的用户,此代码是否“像宣传的那样工作”?
测试它:
同样令人感兴趣的(可能很少)是 Demo of Defensive Loading of Trusted Applets , 哪个链接到小程序页面,小程序中显示的每个 HTML 文件,以及包含代码和 HTML 的源代码,以及一个 Ant build.xml,这样您就可以“在家做, children ”。
这是新代码。
package org.pscode.eg.docload;
import java.awt.BorderLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JFileChooser;
import java.net.URL;
import java.net.MalformedURLException;
import java.io.File;
import java.io.IOException;
import java.security.AccessControlException;
/** An applet to display documents that are JEditorPane compatible.
This applet loads in a defensive way in terms of the security environment,
in case the user has refused to accept the digitally signed code. */
public class DocumentLoader extends JApplet {
JEditorPane document;
@Override
public void init() {
System.out.println("init()");
JPanel main = new JPanel();
main.setLayout( new BorderLayout() );
getContentPane().add(main);
document = new JEditorPane("text/html",
"<html><body><h1>Testing</h1><p>Testing security environment..");
main.add( new JScrollPane(document), BorderLayout.CENTER );
System.out.println("init(): entering 'try'");
try {
// set up the green 'sandboxed URL', as a precaution..
URL sandboxed = new URL(getDocumentBase(), "sandbox.html");
document.setPage( sandboxed );
// It might seem odd that a sandboxed applet can /instantiate/
// a File object, but until it goes to do anything with it, the
// JVM considers it 'OK'. Until we go to do anything with a
// 'File' object, it is really just a filename.
System.out.println("init(): instantiate file");
File f = new File(".");
System.out.println("init(): file instantiated, create file chooser");
// Everything above here is possible for a sandboxed applet
// *test* if this applet is sandboxed
final JFileChooser jfc =
new JFileChooser(f); // invokes security check
jfc.setFileSelectionMode(JFileChooser.FILES_ONLY);
jfc.setMultiSelectionEnabled(false);
System.out.println(
"init(): file chooser created, " +
"create/add 'Load Document' button");
JButton button = new JButton("Load Document");
button.addActionListener( new ActionListener(){
public void actionPerformed(ActionEvent ae) {
int result = jfc.showOpenDialog(
DocumentLoader.this);
if ( result==JFileChooser.APPROVE_OPTION ) {
File temp = jfc.getSelectedFile();
try {
URL page = temp.toURI().toURL();
document.setPage( page );
} catch(Exception e) {
e.printStackTrace();
}
}
}
} );
main.add( button, BorderLayout.SOUTH );
// the applet is trusted, change to the red 'welcome page'
URL trusted = new URL(getDocumentBase(), "trusted.html");
document.setPage(trusted);
} catch (MalformedURLException murle) {
murle.printStackTrace();
document.setText( murle.toString() );
} catch (IOException ioe) {
ioe.printStackTrace();
document.setText( ioe.toString() );
} catch (AccessControlException ace) {
ace.printStackTrace();
// document should already be showing sandbox.html
}
}
@Override
public void start() {
System.out.println("start()");
}
@Override
public void stop() {
System.out.println("stop()");
}
@Override
public void destroy() {
System.out.println("destroy()");
}
}
最佳答案
这是 java.stderr
的输出(一半相当于 Java 控制台 - 另一半是 java.stdout
,在你的情况下它是空的):
net.sourceforge.jnlp.LaunchException: Fatal: Initialization Error: Could not initialize applet.
at net.sourceforge.jnlp.Launcher.createApplet(Launcher.java:604)
at net.sourceforge.jnlp.Launcher.getApplet(Launcher.java:548)
at net.sourceforge.jnlp.Launcher$TgThread.run(Launcher.java:729)
Caused by: net.sourceforge.jnlp.LaunchException: Fatal: Launch Error: Jars not verified.
at net.sourceforge.jnlp.runtime.JNLPClassLoader.checkTrustWithUser(JNLPClassLoader.java:467)
at net.sourceforge.jnlp.runtime.JNLPClassLoader.initializeResources(JNLPClassLoader.java:410)
at net.sourceforge.jnlp.runtime.JNLPClassLoader.<init>(JNLPClassLoader.java:168)
at net.sourceforge.jnlp.runtime.JNLPClassLoader.getInstance(JNLPClassLoader.java:249)
at net.sourceforge.jnlp.Launcher.createApplet(Launcher.java:575)
... 2 more
Caused by:
net.sourceforge.jnlp.LaunchException: Fatal: Launch Error: Jars not verified.
at net.sourceforge.jnlp.runtime.JNLPClassLoader.checkTrustWithUser(JNLPClassLoader.java:467)
at net.sourceforge.jnlp.runtime.JNLPClassLoader.initializeResources(JNLPClassLoader.java:410)
at net.sourceforge.jnlp.runtime.JNLPClassLoader.<init>(JNLPClassLoader.java:168)
at net.sourceforge.jnlp.runtime.JNLPClassLoader.getInstance(JNLPClassLoader.java:249)
at net.sourceforge.jnlp.Launcher.createApplet(Launcher.java:575)
at net.sourceforge.jnlp.Launcher.getApplet(Launcher.java:548)
at net.sourceforge.jnlp.Launcher$TgThread.run(Launcher.java:729)
java.lang.NullPointerException
at net.sourceforge.jnlp.NetxPanel.runLoader(NetxPanel.java:99)
at sun.applet.AppletPanel.run(AppletPanel.java:380)
at java.lang.Thread.run(Thread.java:636)
java.lang.NullPointerException
at sun.applet.AppletPanel.run(AppletPanel.java:430)
at java.lang.Thread.run(Thread.java:636)
java.lang.Exception: Applet initialization timeout
at sun.applet.PluginAppletViewer.handleMessage(PluginAppletViewer.java:637)
at sun.applet.PluginStreamHandler.handleMessage(PluginStreamHandler.java:270)
at sun.applet.PluginMessageHandlerWorker.run(PluginMessageHandlerWorker.java:82)
java.lang.RuntimeException: Failed to handle message: handle 60822154 for instance 2
at sun.applet.PluginAppletViewer.handleMessage(PluginAppletViewer.java:660)
at sun.applet.PluginStreamHandler.handleMessage(PluginStreamHandler.java:270)
at sun.applet.PluginMessageHandlerWorker.run(PluginMessageHandlerWorker.java:82)
Caused by: java.lang.Exception: Applet initialization timeout
at sun.applet.PluginAppletViewer.handleMessage(PluginAppletViewer.java:637)
... 2 more
所以,如果我在对话框中按取消,看起来您的小程序代码甚至都没有加载。
我认为从 Java 方面您无能为力 - 也许使用其他签名过程或通过 JNLP 启动小程序会有所帮助。或者在 IcedTea 上提交错误报告。
为了证明这一点,我创建了一个真正简单的小程序,方法是从您的小程序中省略所有关键内容:
package org.pscode.eg.docload;
import java.awt.FlowLayout;
import javax.swing.*;
public class Example extends JApplet {
JLabel label;
public void init()
{
System.out.println("init()");
SwingUtilities.invokeLater(new Runnable(){public void run() {
label = new JLabel("inited.");
getContentPane().setLayout(new FlowLayout());
getContentPane().add(label);
}});
}
@Override
public void start() {
System.out.println("start()");
label.setText("started.");
}
@Override
public void stop() {
System.out.println("stop()");
label.setText("stopped.");
}
@Override
public void destroy() {
System.out.println("destroy()");
label.setText("destroyed.");
}
}
我编译了它并修改了您的 HTML 文件以改为使用它,它给出了完全相同的症状。
IcedTea 似乎重新定义了当用户按下取消键时要执行的操作。公平地说,对话框中的按钮是“运行”和“取消”,而不是“以所有权限运行”和“沙盒运行”。
(在 Sun 的对话框中有相同的按钮,但实际上它们的意思不同于询问。)
关于java - 这个小程序在 Iced Tea JRE 中工作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5356850/
我正在尝试运行 servlet,因此我想知道要下载哪一个客户端 JRE 或服务器 JRE,因为 Oracle 网站上有两个可用的 JRE?我安装了 JDK 7。 最佳答案 服务器和客户端虚拟机之间的主
我无法理解 Java JRE 的一些基础知识。 我需要在嵌入式系统中运行 Java 代码,为此我需要在 Linux 内核中安装一个最小的 Java 运行时环境,也就是说,执行 Java 二进制文件所需
我正在编写 Java 小程序,想知道将其包含在网页中的最佳方式。 我希望它能提示用户安装 JRE(如果她还没有的话)。此功能应该(理想情况下)在运行 Java 的任何操作系统上跨浏览器工作。另一个要求
我希望使用 JRE 版本 1.6.0_14 加载我的小程序。我已经安装了更新 14、17、24 和 35。我正在使用 标记为 classid加载带有更新 14 的版本。 在这种情况下,小程序会加载更新
我正在配置构建路径,以便我的 Eclipse 项目之一使用与工作区默认值不同的 JRE。在 JRE System Library 窗口中,我看到了 3 个选项... 我知道我不想使用默认工作区,但执行
小程序在浏览器的 JRE 中运行。这是否意味着您不必在计算机上安装 JRE 即可运行小程序? 最佳答案 “浏览器的 JVM”是您安装在计算机上的 JRE。浏览器通常不会自带,它们只会使用您已经安装在系
JDK 中包含的 JRE(位于 jre 文件夹内)和独立的 JRE 有什么区别?有吗? 最佳答案 “独立 JRE”(有时也称为“公共(public) JRE”)通常不包含 HotSpot 的服务器版本
已结束。此问题不符合 Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 a specific programming problem, a software a
我进入 Eclipse 的首选项,将默认 JRE 更改为 Java SE 8,并将 Eclipse 的编译器设置更改为 1.8 JDK 合规性。我什至删除了其他 JRE。 但是,当我导入项目时,正如您
最近我将我的 Linux 机器中的 JRE 从 1.7 + JIT 升级到没有 JIT 的 1.8,并注意到性能大幅下降,即时编译 JVM 是否比带解释器的 JVM 快得多?谢谢, 最佳答案 JIT
我开发了一个 e4 应用程序,可以在 mac os x 和 windows 中运行 我正在使用 mac os x jre 中存在的一些类,但 Windows jre 中缺少它们 当我们从 window
我有一个项目 1 需要在 1.7 上运行,该项目依赖于另一个在 1.8 上构建的项目 2。 我试图在项目 1 内调用项目 2 中的类,但出现一个已知错误,该错误已在 1.8 中修复。如果我在 JRE
我正在编写一个 Java Swing 应用程序。我从 Oracle 网站下载了适用于 Linux 平台的 JRE,并将这个 JRE 捆绑到了我的应用程序中。 我已经给出了一个启动器脚本,其中我引用了捆
我正在通过 java 1.6 u_17 进行编程,但我安装了 JRE 版本 6 和 JRE 版本 7,那么如何从 JDK 1.6 运行我编译的程序以仅通过 JRE 6 运行? 默认情况下,它通过 JR
这个问题在这里已经有了答案: how to check jre version using java application (6 个答案) 关闭 7 年前。 我安装了多个 JRE(6、7、8,32
我已经在我的机器上安装了 Java 8 并用它启动了一个项目。但是,当我使用 @Override 注释时,代码带有红色下划线,并且出现错误 Syntax error, annotations are
我(作为一个非 Java 的人)对我的本地 JRE 10 安装需要更新感到困惑,但是在更新时,我得到了 JRE 8!这甚至在 https://java.com/en/download/more_inf
私有(private) jre 和公共(public) jre 有什么区别?有没有关于这个主题的官方论文? 我没有找到关于这个主题的任何问题。我也无法在周围找到令人满意的东西。 最佳答案 A JRE
Java JRE 混合代码安全性,从 JRE 1.6.0_19 及更高版本开始最初在 2010 年左右,使用 JDK/JRE 1.6.0_12 实现、构建和部署了一个主 jar Java Applet
我需要 JRE 来使用仅提供英文版本的 JRE 资源的翻译版本。 根据 ResourceBundle.java 文档,这很简单:添加具有正确语言环境后缀的本地化资源。例如,标准 XMLSchemaMe
我是一名优秀的程序员,十分优秀!