2011-03-29 8 views
5

Hey guys. Başka bir Java sınıfını çalıştıran yeni bir Java süreci yaratan bir Linux ortamında kullanılmak üzere tasarlanan Java'da bir program üzerinde çalışıyorum, ancak bununla sorun yaşıyorum. Sonunda bütün sorunlarımı çözdüm. Benim Java programı Linux'ta Java Runtime.exec sıkıntıları

Runtime.getRuntime().exec(new String[] { "/bin/bash", "-c", "'java -classpath /home/kevin/workspace/Misc/bin HelloWorld'" }) 

çağırma ya stdout'u/stderr'e içinde

/bin/bash: /usr/lib/jvm/java-6-openjdk/jre/bin/java -classpath /home/kevin/workspace/Misc/bin HelloWorld: No such file or directory 

döndürür. Ben

Runtime.getRuntime().exec(new String[] { "/bin/bash -c 'java -classpath /home/kevin/workspace/Misc/bin HelloWorld'" }) 

çalışırsanız ben basit

Runtime.getRuntime().exec("/bin/bash -c 'java -classpath /home/kevin/workspace/Misc/bin HelloWorld'") 

bana

-classpath: -c: line 0: unexpected EOF while looking for matching `'' 
-classpath: -c: line 1: syntax error: unexpected end of file 

Stdout'a gelen/stderr'yi verir kullanarak,

Cannot run program "/bin/bash -c 'java -classpath /home/kevin/workspace/Misc/bin HelloWorld'": java.io.IOException: error=2, No such file or directory 
    ... 
Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory 

Ve nihayet bir Java istisna olsun.

Bu arada, (dosyanın en üstünde!/Bin/bash hiçbir #) Yeni bir satır .sh dosya oluşturma (ve uygun izin atama) sadece bununla

/bin/bash -c 'java -classpath /home/kevin/workspace/Misc/bin HelloWorld' 

ile doğru çıktı verir hata yok.

Kullanım Runtime.exec kullanımının oldukça karmaşık olduğunu ve daha önce aldığım bazı büyük sorunları zaten çözdüğümü anlıyorum, ancak bu sorun sadece düz bulmacalar (örneğin Runtime.exec'in StringTokenizer'ın kullanımı İçlerinde boşluk bulunan komutlar, bu yüzden String dizilerini kabul eden aşırı yüklemeyi başlattım). Bununla birlikte, hala sorun yaşıyorum ve nedenini anlamıyorum.

cevap

11

İlk denemeniz neredeyse doğruydu.

Runtime.getRuntime().exec(new String[] { "/bin/bash", "-c", "java -classpath /home/kevin/workspace/Misc/bin HelloWorld" }) 

Tek tek String argümanlar geçen etkili bir otomatik olarak tırnak çünkü alıntı ekstra gerekmez.

+2

Efendim, en iyisisiniz. Cevabın bu kadar basit olduğuna inanamıyorum! Çok teşekkür ederim, böyle bir şey yapmayı asla düşünmezdim. –