【问题标题】:Effective way to make a system tray application制作系统托盘应用程序的有效方法
【发布时间】:2010-11-05 01:14:12
【问题描述】:

这是我在 Stack Overflow 上的第一篇文章,我只是想知道制作系统托盘应用程序的选项。该应用程序将在仍在运行时从系统托盘主运行,并且可以在单击时进入一个窗口。还需要对全局击键跟踪提供一些支持,才能弹出一个窗口。

我很好奇我可以使用哪些选项,因为我确信有很多方法可以做到这一点。尽管我对 C++ 有一些经验,但我最熟悉 Java。我愿意探索其他语言,如果它们对它们有一些明确的好处,尽管以某种方式使用我所知道的东西会很好。

谢谢

【问题讨论】:

    标签: java c++ desktop-application system-tray


    【解决方案1】:

    Java 6 具有允许创建使用系统托盘的应用程序的新功能。

    New System Tray Functionality in Java SE 6 文章详细介绍,并提供了一些示例代码。

    java.awt 包中新增的SystemTrayTrayIcon 类可用于向系统托盘添加图标。图标可以响应鼠标点击并使用弹出菜单。但是,这个新功能是 AWT 的一部分,因此它与 Swing 组件的集成效果不是很好。

    这是一个显示在系统托盘中的小时钟示例,它是使用 Java 6 中的 SystemTrayTrayIcon 类制作的:


    (来源:coobird.net

    【讨论】:

    • 谢谢你的建议,我试试java。虽然我也可以尝试使用 Foredecker 建议的 WTL 的建议。我会假设 C++ WTL 路线在性能方面会更好,尽管我想知道多少(如果它真的很明显,尽管我猜它实际上在某种意义上取决于应用程序本身)。感谢您对此事的意见。
    【解决方案2】:

    普通的旧 Winform 会得到我的投票。

    如果您熟悉 Java,使用其中一种托管语言使用 .NET 创建简单的托盘应用程序应该不会有什么困难。

    Here 是有关创建托盘应用程序的正确方法的一些建议。

    【讨论】:

      【解决方案3】:

      在此处小心管理应用程序和 Java。托盘应用程序一直在运行。因此,如果它们写得不好,那么它们可以使用足够的系统资源来干扰其他事情。

      总体而言,托管代码或 Java 没有任何问题,但要让托管或 Java 应用程序在内存、I/O 和 CPU 时间方面保持节俭可能会更加困难。

      我是作为 Windows perf 团队的开发经理这么说的 - 我们已经看到很多非常多的小猪托盘应用程序。是的,有些甚至是 Windows 或 MSFT 应用程序。

      编写一个非常小的轻量级托盘应用程序可能是一种更好的方法,该应用程序可以在用户需要时启动更丰富的进程。您可以在低级 Win32 API 之上用简单的 C++ 编写您的试用应用程序。如果您不想直接使用 Win32 API,可以使用Windows Template Library

      【讨论】:

      • 毫无疑问,长时间运行的应用程序在内存方面很容易陷入困境。但是根据您的理由,使用托管语言将薄 UI 层编写为托盘应用程序也是安全的(并且可以说比使用 win32 更快):)
      • 这不是真的。尤其是在内存方面,使用管理语言和 Java 比使用原生应用程序更难节俭。我见过很多这样的例子。例如,Coobird 示例中的小时钟很可能比用本机代码编写的要大得多。尤其如此,因为它始终处于活动状态。笔记!我并不是说托管或 Java 应用程序在这里是错误的选择 - 只是需要格外小心以防止它们使用太多资源。
      猜你喜欢
      • 2011-05-22
      • 1970-01-01
      • 1970-01-01
      • 2010-10-19
      • 1970-01-01
      • 2012-09-16
      • 1970-01-01
      • 1970-01-01
      • 2010-10-06
      相关资源
      最近更新 更多