Сделать OSD уведомления через Java - PullRequest
2 голосов
/ 24 января 2012

Я пытаюсь получить доступ к пузырю уведомлений в Ubuntu через Java

вот мой код

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

В принципе, я не могу понять перегрузки exec() метода класса Runtime? Кто-нибудь может мне помочь в этом отношении?

1 Ответ

12 голосов
/ 24 января 2012

Я считаю, что проблема в том, что он ищет всю строку в качестве имени запускаемого процесса. Попробуйте вместо этого:

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

Это должно отделить имя процесса от аргументов, а каждый аргумент - от остальных.

...