我绝望地试图拒绝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]
答案 0 :(得分:0)
这是Oracle Forms 12c中的已知错误。它由临时补丁23123655修复,必须应用于12.2.1.1(补丁集1)之上。只要它可用,它也将包含在12.2.1.2中。原始12.2.1.0版本没有修复。