Java Webstart否认关闭

时间:2016-03-10 14:16:59

标签: java applet oracleforms

我绝望地试图拒绝applet关闭,这开始使用java webstart。我试图找到父JFrame并向其添加WindowListener并覆盖stop内的Applet方法。 在这种情况下,Main类是Oracle为Oracle Forms提供的类。 这是一个继承自Applet的类。

现在正在发生的事情是我收到了一条消息KILLING PROCESS,但是applet不动地开始关闭,尽管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]

1 个答案:

答案 0 :(得分:0)

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