有没有办法确保用户无法关闭或离开我的Swing应用程序?我试图将其全屏显示,但你仍然可以使用Alt-Tab远离它 - 此外,当你决定使用JOptionPane的对话框时,这种方法效果不佳。
那么,有没有办法让用户在设备上只使用这一个Java程序?
编辑:有些人想知道这个目的。该应用程序应该被“嵌入”到手持设备(在Windows下运行),因此设备的用户将使用它,因为我们打算使用它 - 例如,他们不会玩Freecells或做更糟糕的是,而不是做实际的工作。你看过售票亭了吗?他们被锁定得很好,你不能只关闭他们华而不实的GUI并进入Windows桌面!
答案 0 :(得分:6)
好的@Daniel通过调用以下方式向您展示了如何使Java应用程序无法关闭(+1给他)
JFrame#setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
。
确保你不能离开它,即按 CTRL + ALT + DEL 和 ALT + < kbd> TAB 等你可能想要这样做(仅适用于windows):
1)通过以下方式禁用TaskManager / CTRL + ALT + DEL :
设置注册表项:
HKCU / Software / Microsoft / Windows / CurrentVersion / Policies / System / DisableTaskMgr = 1
通过reg脚本或cmd.exe。
2)要一起禁用所有快捷方式,例如 ALT + TAB 等,请参阅here(下载/使用JFrame
脚本并通过*.reg
)。
答案 1 :(得分: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);
}
}
答案 2 :(得分:2)
我们做了类似于POS应用程序的事情,但我们做了一些欺骗。虽然使用全屏帮助很多,但我们发现用户仍然可以退出应用程序。
最后,我们创建了一个Windows服务(是的,我们在Windows上运行),它会在关闭后立即自动进行RESTAR。因此,您可以看到Windows桌面(我们删除了图标)一瞬间,然后再次弹出应用程序。这样做的好处是我们可以从Intranet远程更新JAR文件,所有用户需要做的是按下一个关闭系统的按钮,它会自动重启并更新。我们想使用WebStart,但在将它与我们的包装器集成时遇到了问题。
包装器本身是一个Python应用程序,它只启动JVM和应用程序,编译为EXE。简单但有效。
净效应是一个可关闭的应用程序,它将自动重新启动。足够我们使用,我们需要用户只能做一件事和一件事。为应用程序提供启动凭据管理员权限,以及用户只是一个普通帐户,也可以处理讨厌的'alt-ctrl-del'用户。你不能杀死一个比你自己拥有更高访问权限的进程。
如果你不想写自己的包装纸,给http://wrapper.tanukisoftware.com/doc/english/product-overview.html一个旋转,它看起来像一个很棒的产品。
答案 3 :(得分:1)
您可以在应用中捕捉到您喜欢的任何击键(并忽略它们),因此可以修复Alt-Tab。应用程序可以从不(ish)处理自身的一个组合键是Ctrl + Alt + Delete,出于安全原因,它在许多操作系统中被挂接到内核中。作为旁注:这就是为什么许多登录屏幕要求您在输入用户名和密码之前点击C + A + D.
答案 4 :(得分:1)
您可以创建一个无法最大化或关闭的最大化窗口。您还必须捕获某些击键,例如CTRL + SHIFT + ESCAPE,ALT + TAB,WIN + [任何],各种Fn键,并且您必须做一些事情来阻止CTRL + ALT + DELETE工作(来自显示任务管理器或在Windows Vista或7中显示蓝色选项屏幕。
我相信有一些Windows API调用可以某种方式改变CTRL + ALT + DELETE的行为,但不知道它们是什么。调查的好地方是Sysinternals Process Explorer,它具有替换任务管理器的功能。弄清楚它是如何做到的,然后复制它。