2

我有一个 Java 小程序,它提供一个 JButton,允许用户导航到另一个 URL(它有一个反馈表)。

问题:当我从小程序导航到 Safari 中的表单时,输入表单时出现乱码或无法输入(实际上只有每 10 次左右的击键才输入一次)。

手动终止用于 Safari 的 Java Web 插件可立即解决此问题。我假设我没有在我的小程序中正确释放资源。我知道应该在 stop() 方法中执行清理,但我不确定我没有释放哪些资源可能会导致这种行为。

这是浏览到 URL 的代码:

final JButton btnLaunch = new JButton("Go to survey");
final myJApplet mj = this;
    btnLaunch.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            String url ="www.mywebform.example";

            try {
                getAppletContext().showDocument(new URL(url));
            } catch (MalformedURLException e1) {
                e1.printStackTrace();
            }
            finally {
                SwingUtilities.getWindowAncestor(btnLaunch).dispose();
                mj.stop();
            }
      }

我最好的猜测是 Safari 通过将资源传递给一些 Java ActionListener 以某种方式处理资源不当。但是,包括:

btnLaunch.removeActionListener(this);

在一个finally街区似乎没有帮助。我的小程序中有其他动作侦听器,我知道它们没有被明确销毁,但我假设这通常不是问题,因为它们应该被自动处理掉。

编辑:检查我的代码,似乎我只有 MouseListener 或 ActionListeners(在 JButtons 上)。所以更令人困惑的是我遇到了键盘问题。我尝试在小程序的 stop 方法中手动删除它们(我在 finally 块中手动调用),但它没有帮助。MouseEvents 和 ActionEvents 不应在离开页面后继续运行!

编辑2:更多信息:让小程序打开一个新窗口,然后包含指向最终调查的链接也不起作用。但是,使链接在新窗口中打开(使用 html 的 target="_blank")似乎可以解决问题。因此,为了解决问题,我让小程序将用户引导到一个启动页面,该页面感谢他们,然后提供一个用于最终调查的链接。这很烦人,并且没有回答最初的问题,但现在看来我将要这样做。

4

0 回答 0