【发布时间】: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