java - 通过 Java 发出 OSD 通知

标签 java notifications ubuntu-10.04

我正在尝试通过java访问Ubuntu中的通知气泡

这是我的代码

class TestOSD{

public static void main(String[] args) throws Exception{
    String[] cmmd = {"/usr/bin/notify-send -t 10000 \"Hello OSD\" \"This is my first programmatic OSD notification\""};
    System.out.println("This is said : Hello OSD");
    Runtime.getRuntime().exec(cmmd);
}
}

我在命令行中获取此堆栈跟踪

Exception in thread "main" java.io.IOException: Cannot run program "/usr/bin/notify-send -t 10000 "Hello OSD" "This is my first programmatic OSD notification"": java.io.IOException: error=2, No such file or directory
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:460)
    at java.lang.Runtime.exec(Runtime.java:593)
    at java.lang.Runtime.exec(Runtime.java:466)
    at TestOSD.main(TestOSD.java:6)
Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory
    at java.lang.UNIXProcess.<init>(UNIXProcess.java:148)
    at java.lang.ProcessImpl.start(ProcessImpl.java:65)
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:453)
    ... 3 more

基本上我无法理解 Runtime 类的 exec() 方法的重载?有人可以在这方面帮助我吗?

最佳答案

我认为问题在于它正在寻找整个字符串作为要启动的进程的名称。试试这个:

String[] cmd = { "/usr/bin/notify-send",
                 "-t",
                 "10000",
                 "Hello OSD This is my first programmatic OSD notification"};

这应该将进程的名称与参数分开,并将每个参数与其余参数分开。

关于java - 通过 Java 发出 OSD 通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8987485/

相关文章:

java - XSLT 转换,如果源中不存在则输出元素,如果存在则保持原样

java - 根据对象列表中列表中的字段对对象列表进行排序

android - 我们如何以编程方式在 Android Q OS 中实现可搜索的进度条?

ios - UNNotificationRequest 需要唯一标识符,但也会触发重复项

java - "throttled concurrency"在Java中意味着什么?

java - 缺少单独的调试信息,请使用 : debuginfo-install glibc-2. 12-1.166.el6_7.7.x86_64

objective-c - 为什么 NSNotification 中的 Observer 调用了两次......?

linux - 我的 drupal 仅在我在线时运行

tomcat7 - Tomcat 未在 docker 镜像上运行

ruby-on-rails - Rails - capistrano 和 chmod