10

有没有办法确保用户不能关闭或离开我的 Swing 应用程序?我试图让它全屏显示,但你仍然可以 Alt-Tab 离开它——此外,当你决定使用 JOptionPane 的对话框时,它不能很好地工作。

那么,有没有办法让用户在一台设备上只使用这一个 Java 程序呢?

编辑:有些人想知道目的。该应用程序应该被“嵌入”到手持设备(在 Windows 下运行)中,因此设备的用户将按照我们的意图使用它——例如,他们不会玩 Freecells 或做更糟糕的事情,而不是做实际的工作。你见过售票亭吗?它们被很好地锁定了,你不能只关闭它们华丽的 GUI 并进入 Windows 桌面!

4

5 回答 5

7

好的@Daniel 向您展示了如何通过调用使 Java 应用程序无法关闭(对他 +1):

JFrame#setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

JFrame实例上。

为了确保您不能离开它,即按CTRL+ ALT+DELALT+TAB等,您可能需要这样做(仅适用于 Windows):

1)通过以下方式禁用TaskManager / CTRL++ ALTDEL

  • 设置注册表项:

    HKCU/软件/微软/Windows/CurrentVersion/策略/系统/DisableTaskMgr = 1

    通过 reg 脚本或 cmd.exe。

2) 要同时禁用所有快捷方式,如ALT+TAB等,请参见此处 (下载/使用*.reg脚本并通过执行它cmd)。

于 2012-10-08T15:21:58.893 回答
3

我们对 POS 应用程序做类似的事情,但我们有点作弊。虽然使用全屏有很大帮助,但我们发现用户仍然可以退出应用程序。

最后,我们创建了一个 Windows 服务(是的,我们在 Windows 上运行),一旦它关闭就会自动重启。因此,您可以在一瞬间看到 Windows 桌面(我们删除了图标),但随后该应用程序再次弹出。这样做的好处还在于,我们可以从 Intranet 远程更新 JAR 文件,用户只需按下关闭系统的按钮,系统会自动重新启动并更新。我们想使用 WebStart,但在将它与我们的包装器集成时遇到了问题。

包装器本身是一个 Python 应用程序,它只是启动 JVM 和应用程序,编译为 EXE。简单,但有效。

最终效果是一个可关闭的应用程序,它将自动重新启动。在我们需要用户能够做一件事且只做一件事的情况下,我们的使用已经足够好了。为应用程序管理员权限提供启动凭据,而用户只是一个普通帐户,同时也照顾了讨厌的“alt-ctrl-del”用户。你不能杀死一个拥有比你自己更高访问权限的进程。

如果您不想编写自己的包装器,请试一试http://wrapper.tanukisoftware.com/doc/english/product-overview.html,它看起来像是一款出色的产品。

于 2012-10-08T13:55:01.890 回答
3

不可关闭是的,您可以使用setDefaultCloseOperation();并通过它JFrame.DO_NOTHING_ON_CLOSE

例子:

import javax.swing.*;
import java.awt.*;

class app extends JFrame {
    app(String title, int height, int width)
    {
        super (title);
        setSize(width, height);
        setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
        setVisible(true);
    }

}
class program {
    public static void main(String[] args) {
        app myApp = new app("Hello", 350, 750);
    }
}
于 2012-10-08T13:37:11.437 回答
1

您可以在应用程序中捕捉到几乎任何您喜欢的击键(并忽略它们),因此可以修复 Alt-Tab。应用程序永远无法(ish)自己处理的一个组合键是 Ctrl+Alt+Delete,出于安全原因,它在许多操作系统中被挂接到内核中。附带说明:这就是为什么许多登录屏幕要求您在输入用户名和密码之前点击 C+A+D。

于 2012-10-08T13:39:22.250 回答
1

您可以制作一个无法取消最大化或关闭的最大化窗口。您还必须捕获某些击键,例如 CTRL+SHIFT+ESCAPE、ALT+TAB、WIN+[anything]、各种 Fn 键,并且您必须采取一些措施来阻止 CTRL+ALT+DELETE 工作(从显示任务管理器或从 windows vista 或 7 中调出蓝色选项屏幕。

我相信有 Windows API 调用可以以某种方式改变 CTRL+ALT+DELETE 的行为,但不知道它们是什么。Sysinternals Process Explorer 是一个研究的好地方,它具有替换任务管理器的功能。弄清楚它是如何做到的,然后复制它。

于 2012-10-08T13:41:06.070 回答