【问题标题】:Creating single instance for system tray in java在java中为系统托盘创建单个实例
【发布时间】:2011-05-06 15:12:17
【问题描述】:

我正在使用 java 创建的桌面应用程序。我们正在为应用程序的 Windows 版本(用于在 Windows 操作系统上运行)工作。当我们运行我们的应用程序时,它会使用 systemtray as 在桌面上创建一个托盘图标

SystemTray tray = SystemTray.getSystemTray();

我正在创建系统托盘的单个实例,我正在应用程序的主类中创建它。

我正在为我的应用程序创建 exe。我的问题是当我运行我的应用程序的 exe 文件时,它每次都会创建托盘图标。

我希望在我的应用程序中只有一个托盘图标出现在桌面上并作为服务运行。只有在卸载应用程序时,该图标才会被删除。它应该在后台作为服务运行。

我没有任何方法可以帮助我将应用程序作为服务运行,并且应该只有一个实例在后台运行。

我想通过将托盘图标创建为服务来运行我的应用程序,并且应该存在单个实例。请在这个问题上指导我。

提前感谢您提出的所有宝贵建议。

【问题讨论】:

    标签: java windows service systray single-instance


    【解决方案1】:

    使您的应用程序成为单一实例。请告诉您如何使用 Java 制作 .EXE 文件?

    【讨论】:

    • 感谢您回答 Mudassir。我正在使用高级安装程序创建 exe。高级安装程序使用 jar 文件并从 jar 中创建 exe。
    【解决方案2】:

    要显示托盘图标,您的应用必须正在运行。如果您的托盘图标出现两次(或更多),那么您的应用程序会运行多次。您必须自己为此添加支票。

    您不想将您的应用作为 Windows 服务运行,因为通常这些服务无法访问 Windows 桌面。

    【讨论】:

    • 您不想将您的应用程序作为 Windows 服务运行,因为通常这些应用程序无法访问 Windows 桌面。可能是 Toman 正在尝试制作一些反病毒类型的程序,该程序在后台运行并通过系统托盘图标显示它们的存在。
    • @Mudassir 在这种情况下,他应该用它制作两个应用程序。一个用于 Windows 后台服务,另一个用于通过网络或其他方式连接。
    • 感谢您的 cmets。我的应用程序是进行在线备份。它会备份您选择的文件并在服务器上自动更新,因此它需要在后台作为服务运行。我正在应用程序的主类中为系统托盘创建单个实例,但我的应用程序无法识别是否已经存在任何实例。
    【解决方案3】:

    正如 Mudassir 所说,您应该在启动程序时添加一个检查,以尝试查找您应用的另一个正在运行的实例。这可以通过在启动时创建特定文件并在关闭时将其删除来完成。如果在您启动应用程序时该文件已经存在,则意味着另一个实例正在运行。 你也可以使用进程间通信,但它比一个简单的文件更难。

    对于“服务”部分,您可以在启动时隐藏主窗口,这样您的应用就会像 Windows 服务一样运行。

    【讨论】:

    • 感谢您的回答,我希望这对我有用。请详细说明服务部分。
    • 我认为用 Java 创建 Windows 服务是不可能的,这意味着可以在启动时自动运行的服务,并且可以像其他标准 Windows 服务一样进行管理。但是你可以通过在注册表中添加一个条目来做类似的事情(谷歌类似于“windows自动启动”)。当您的程序启动时,它将检查另一个实例是否正在运行。如果没有,它将创建一个您想要的系统托盘图标,并隐藏其窗口(如果它实际上使用某种 GUI)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 2017-05-21
    • 2011-01-11
    • 1970-01-01
    • 2021-01-26
    相关资源
    最近更新 更多