2012-01-24 1 views
2

Я пытаюсь получить доступ к пузырю уведомлений в Ubuntu через JavaСделать уведомление OSD с помощью 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? Может ли кто-нибудь помочь мне в этом отношении?

ответ

11

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

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

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

+0

Это работает. Какая перегрузка была использована? Что я сделал не так? – prometheuspk

+0

@ Prometheus87: Это использует ту же самую перегрузку, но передаёт ссылку на массив из 4 строк, а не массив с * одной * строкой, содержащий как имя программы, так и * аргументы командной строки. –

+2

Вы можете использовать String [], как это делает Джон, выше (один аргумент для элемента массива), или простая строка, содержащая весь текст, как вы пытались в своем примере. Проблема заключалась в том, что вы объединили два подхода. –