繁体   English   中英

Java Applet无法响应Webkit浏览器中的重画请求

[英]java applet not responding to repaint request in webkit browsers

我目前正在编写一个小型Java小程序,以浏览器无关的方式解决公司内部网中的特定问题。 这曾经使用ActiveX完成,但我们希望让人们远离IE。 该代码对于公共消费显然是不安全的,但是在受控环境下很有用。 本质上,我希望用户能够单击其链接并基于AJAX调用返回的数据打开安装在本地计算机上的应用程序。 这是一个经过签名的Java小程序,并且证书已在本地计算机上接受。

目前,该功能在IE和Opera中完美运行,但在Chrome和Safari中则无法运行。 看来repaint()方法实际上并不会导致重画,而我正为此苦苦挣扎。 这是小程序代码:

import java.applet.Applet;
import java.awt.Graphics;
import java.util.*;

public class OdehAppLauncher extends Applet {

    private ArrayList<String> toRun = null;

    public void paint(Graphics g) {
        System.out.println("-----painting");
        try {
            if (toRun != null) {
                new ProcessBuilder(toRun).start();
                toRun = null;
            }

        } catch (Exception e) {
            System.out.println("-----Exception e = " + e);
            e.printStackTrace();
        }
    }

    public void runApp(String appName, String args) {
        System.out.println("-----running app: " + appName);
        toRun = new ArrayList<String>(2);
        toRun.add(appName);
        toRun.add(args);
        System.out.println("-----triggering a repaint...");
        repaint();
    }
}

当调用runApp方法时,这是四个经过测试的浏览器的Java控制台的最后几行:

IE 9(测试版)-作品:

基本:Applet开始
基本:已启动告诉客户小程序
- - -绘画
-----正在运行的应用程序:notepad.exe
-----触发重绘...
- - -绘画

Safari 5.0.2(7533.18.5)-失败

liveconnect:JavaScript:默认安全策略=
-----正在运行的应用程序:notepad.exe
-----触发重绘...

Opera 10.62-作品

基本:Applet开始
基本:已启动告诉客户小程序
- - -绘画
- - -绘画
- - -绘画
-----正在运行的应用程序:notepad.exe
-----触发重绘...
- - -绘画

Chrome 6.0.472.63-失败

基本:Applet开始
基本:已启动告诉客户小程序
-----正在运行的应用程序:notepad.exe
-----触发重绘...

请让我知道,如果您能想到任何原因导致其无法始终如一地运行(或一般而言是一种更好的方式)。 我还应该指出,我已经尝试过直接从runApp调用直接启动该过程,但这普遍失败。

也许此链接提供了一些提示。 例如:

注意:如果在处理初始重绘请求之前在组件上发生了多次对repaint()的调用,则多个请求可能会折叠为对update()的单个调用。 确定何时应折叠多个请求的算法取决于实现。 如果多个请求被折叠,则生成的更新矩形将等于折叠请求中包含的矩形的并集。

您可能要检查小程序是否可见,最近是否有油漆,以及是否调用过update(Graphics)...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM