【问题标题】:Java Webstart deny closingJava Webstart 拒绝关闭
【发布时间】:2016-03-10 14:16:58
【问题描述】:

我拼命地试图拒绝关闭小程序,这确实是从 java webstart 开始的。我试图找到父JFrame 并向其添加WindowListener 并覆盖Applet 中的stop 方法。 本例中的Main 类是Oracle 为Oracle Forms 提供的一个类。 这是一个继承自Applet 的类。

现在发生的事情是我收到了一条消息 KILLING PROCESS,但是尽管有 JOptionPane 调用,小程序还是立即开始关闭,理论上应该让关闭等待直到我关闭消息。

此外,我尝试将JFrame#setDefaultCloseOperation 设置为JFrame.DO_NOTHING_ON_CLOSE,但它总是设置为JFrame.HIDE_ON_CLOSE

所以我的问题是,java webstart 正确监听主要Frame 的关闭事件并在按下关闭按钮时拒绝关闭它的方式是什么。

Applet 的代码

public class ResizableWSApplet extends Main {
    private JFrame root = null;

    @Override
    public void init() {
        super.init();
        Component parent;
        parent = this;
          // Find the parent JFrame 
        while(parent.getParent()!=null) parent = parent.getParent();
        if (parent instanceof JFrame) {
            root = (JFrame) parent;
        }
          // Remove WindowListener as a test
        for(WindowListener l : root.getWindowListeners())
            root.removeWindowListener(l);
    }

    protected Frame getRoot() {
        return root;
    }

    @Override
    public void windowClosing(WindowEvent arg0) {
        System.out.println("KILLING PROCESS");  
        JOptionPane.showMessageDialog(root, "TEST");
        //super.windowClosing(arg0);
    }

    @Override
    public void stop() {
        System.out.println("TEST1");
        JOptionPane.showMessageDialog(this, "TEST");
        super.stop();
    }
}

跟踪文件的最后几行:

KILLING PROCESS
basic: JNLP2ClassLoader.findClass: applet.ResizableWSApplet$OsCheck$OSType: try again ..
basic: JNLP2ClassLoader.findClass: oracle.ewt.lwAWT.lwText.AutoScroller: try again ..
basic: JNLP2ClassLoader.findClass: oracle.forms.ui.DropDownEvent: try again ..
Plugin2Manager calling stopFailed() because of exception during AppContext.dispose()
Plugin2Manager calling stopFailed() because of displayable window java.awt.Frame[frame1,0,0,132x38,invalid,hidden,layout=java.awt.BorderLayout,title=,resizable,normal]

【问题讨论】:

    标签: java applet oracleforms


    【解决方案1】:

    这是 Oracle Forms 12c 中的一个已知错误。它由临时补丁 23123655 修复,该补丁必须在 12.2.1.1(补丁集 1)之上应用。只要可用,它也将包含在 12.2.1.2 中。原始 12.2.1.0 版本不存在修复程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-19
      • 2015-11-08
      相关资源
      最近更新 更多