【问题标题】:How do I render nice desktop notifications from Java? [closed]如何从 Java 呈现漂亮的桌面通知? [关闭]
【发布时间】:2011-06-27 21:26:48
【问题描述】:

我正在编写这个非常基本的 J2SE 应用程序,它时不时地用一些信息提醒用户。目前我正在使用 SystemTray 和 TrayIcon 类来显示通知,但我对此并不满意。它不允许我调整通知,也不允许它们好看。

那么,有人知道一个易于使用的库来生成漂亮的通知吗?

顺便说一句,我将移植到 Linux (Ubuntu),但将在那里使用 notify-OSD,这正是我所需要的。

【问题讨论】:

  • 你也许可以继承 TrayIcon 并覆盖 displayMessage()
  • @jpm 这似乎是一个合理的想法。我有点希望有人已经这样做了。我不能成为地球上第一个需要这个的人吗?如果我采用此解决方案,则有关从何处开始绘制通知的任何提示,因为我对此没有经验。欢迎任何参考。
  • 实际上,调查一下,似乎没有一个很好的方法可以便携。目前,您只是使用默认外观吗?如果是这样,您可能会考虑尝试不同的方法。查看有关该主题的official tutorial,看看是否可以满足您的需求。

标签: notifications java


【解决方案1】:

我不知道抽象所有操作系统特定桌面通知的 Java 库。但如果您知道,您仅限于 Ubuntu(可能还有数量有限的其他操作系统),您可以创建自己的 Interface 并针对特定操作系统实现它。

  • Ubuntu:您可以通过Runtime 访问/usr/bin/notify-send,如下所示:usr/bin/notify-send -t 30000 "Text1" "Text2" -i /path/to/48x48.png
  • Mac OSX:Java Growl API

对于 JAVA 实现,您可以查看 JazzMylyn(请参阅 Java Desktop Notifications)。

【讨论】:

  • Ubuntu 不是问题,我可以在那里使用 java-gnome 项目。 Windows 是问题所在(暂时不考虑 Mac)。我想我会接受你关于创建接口的建议,并为 ubuntu 和 Mylyn/Jazz 为 Windows 实现 notify-osd。如果我有结果,我会在这里更新。
  • 你能详细说明一下Runtime的部分吗?是java调用CLI命令的方法吗?
【解决方案2】:

您可以将JCommunique 用于跨平台Java 桌面通知。这是改编自 wiki 上的 examples 的简短演示:

// makes a factory with the built-in clean theme
// themes are customizeable
NotificationFactory factory = new NotificationFactory(ThemePackagePresets.cleanLight());
// factories build notifications using a theme, while managers handle how
// how they appear on the screen
// this manager just simple pops up the notification in the specified location
// other managers do sliding, queues, etc.
NotificationManager plain = new SimpleManager(Location.NORTHEAST);

// creates a text notification; you can also have progress bar Notifications,
// icon Notifications, Notifications that ask for user feedback, etc.
TextNotification notification = factory.buildTextNotification("This is a title",
                                                              "This is a subtitle");
notification.setCloseOnClick(true);
// the notification will disappear after 2 seconds, or after you click it 
plain.addNotification(notification, Time.seconds(2));

简短的表白:我也是这个项目的创建者。它是开源的,所以我没有从中获得任何收入。

其他一些库可以看看:

闪烁

  • 这在另一个答案中已经提到,所以我不会多说。我尝试了 Java Webstart 演示,它看起来很不错。它允许一些更复杂的背景颜色选项,例如 JCommunique 没有的渐变。
  • 大约 3,500 行。
  • 拥有大量精美的样式选项,例如圆形与矩形关闭按钮、渐变与纯色以及浅色与深色通知。但是,只有一名顺序经理。
  • Wiki 包含指向 javadocs 和入门文档的链接。
  • 没有外部依赖(我认为?)。

JCarrierPigeon

  • 非常轻巧。看看 jar,它只有六个类。
  • 取决于“时序框架”库。
  • 网站显示它可以做一些滑动效果,但我不认为它做淡入淡出或其他类型的动画。

JTelegraph

  • 需要 JCarrierPigeon 和类路径中的“Timing Framework”来构建
  • 项目中有几十个漂亮的图标。我不确定这些是如何获得许可的,但如果您没有自己的许可,它们可能会很有用。
  • 据我所知,它所包含的功能并不多于 JCarrierPigeon 中提供的功能。它主要包括一堆内置图标和不同的 API。

我无法发布这些链接,因为我没有足够的声誉,但在互联网上很容易找到它们。 现在我将尝试客观地评估我自己的库与上述比较。请记住,这个列表更广泛一些,因为我比其他人更了解我的项目。让我知道我是否缺少任何东西。

JCommunique

  • 许多功能。就通知而言,有 TextNotifications、IconNotifications、AcceptNotifications 和 ProgressNotifications(显示进度条)。 NotificationManagers 处理通知的显示方式。其中包括 SimpleManager、QueueManager(向下滚动旧通知以显示新通知)、SlideManager(将通知滑动到位)和 SequenceManager(仅在前一个通知消失时显示通知)。
  • 相对较大。我认为它总共有大约 2,500 行。
  • 有一个包含大量示例的 wiki。
  • 通知看起来有点单调,因为它们只能是一种纯色。 Twinkle在这方面胜出;它的通知周围有渐变和轮廓。
  • 一些内置主题。在撰写本文时,这些包括深色、浅色和浅绿色。您也可以添加自己的。
  • 没有除 Java 之外的外部依赖项。

【讨论】:

  • 我已经取消删除了这个,因为你投入了很多工作。但是,按照我们的标准,这个问题是题外话,所以现在关闭了。
【解决方案3】:

无耻插件:我刚刚发布了一个名为 Twinkle 的项目,它几乎是 Java Swing 的咆哮。

【讨论】:

  • 它在概念上看起来很棒,对我来说唯一的问题是价格......!
  • 感谢您的意见!您认为合适的价格是多少?
  • 这取决于你的目标是谁。在企业界,这将是巨大的损失,如果大公司需要这种紧密的整合,我相信他们完全可以毫无问题地支付它。我想我只是跳入并期望它是一个不错的小 GPL 实用程序,仅此而已(考虑到我目前几乎只在从事开源工作,这可能是由于我的心态而不是其他任何事情!)
  • 我认为我的措辞不是很好,因为“项目”听起来确实像开源。我从开发人员的角度重新考虑了价格(而不是从我妻子的角度 ;-) ),它确实很高。再次感谢您的意见!
  • 演示看起来很完美!正是我正在寻找的。但是我和berry120有同样的问题。我正在寻找可以在一个非常小的开源实用程序中使用的东西,因此封闭源代码通知系统并不适合该应用程序。
猜你喜欢
  • 2021-01-13
  • 2012-07-01
  • 2011-01-17
  • 1970-01-01
  • 2011-09-05
  • 2015-05-12
  • 1970-01-01
  • 2014-01-12
  • 1970-01-01
相关资源
最近更新 更多