2016-04-13 14 views
0

OS X için bir Java SWT uygulaması yazdım, onu .jar olarak ihraç ettim ve .app. Uygulamamdaki kritik bir bölüm hariç her şey beklendiği gibi çalışır; diğer uygulamaları açmayı gerektirir.OS X Java .app paketi başka uygulamaları açamıyor mu?

Bunu yapmak için Runtime.exec();'un yanı sıra ProcessBuilder'u denedim, bunun için başlatmam gereken diğer uygulamalarda open komutunu çağırıyorum. Bu Eclipse'den gayet iyi çalışıyor veya dışa aktarılmış .jar'ı Terminal üzerinden başlatıyorsam. Ancak, .app'ı çift tıklatarak başladığında işe yaramıyor.

Bunun bir hata mı yoksa Java ya da OS X tarafından bir kısıtlama mı olduğunu merak ediyorum. Çünkü Mac uygulamaları (anladığım kadarıyla) korumalı bir alan olduğundan, bir uygulamanın içinden open telefon numarasını aramanın nedeni bu olabilir mi? hiçbir şey değil?

İhtiyacım olan uygulamayı açmak için iki yaklaşım kullandım. Bu bir Steam oyunu, ama aynı zamanda perakende olarak geliyor, bu yüzden ya uygulama aracılığıyla ya da steam:// protokolünü kullanarak başlatılabilir. Benim kodda aşağıdaki denedim:

ProcessBuilder pb = new ProcessBuilder("open", "steam://rungameid/57300//"); 
pb.start(); 

ProcessBuilder pb = new ProcessBuilder("open", appDir); 
pb.start(); 

appDir Ben başlamak isteyen .app demetine bir yolunu içeren bir dizedir.

Bunun bir Mac uygulama paketinden neden başarısız olduğunu, ancak Eclipse/Jar'dan düzgün çalıştığı konusunda herhangi bir fikrin var mı? Uygulamayı konsol ile çalıştırarak (paketteki bash komut dosyasıyla) herhangi bir hata döndürmüyor, bu yüzden bana Java'nın komutu düzgün olarak çalıştırdığını, ancak OS X'in bunu görmezden geldiğini düşünüyor.

Bunun için Google'da arama yapmayı da denedim, ancak belki de çok nadir görülen veya çok spesifik görünüyor ve hiçbir şey bulamadım.

+0

Eğer Konsolu herhangi mesajımı aldın mı: Burada benim diğer soru daha derinlemesine bir cevap yazdı? – Black

+1

, "Runtime.exec()" ifadesini, burada verilen yanıtta ayrıntılı olarak kullanmayı denediniz: http://stackoverflow.com/questions/19456454/how-do-i-launch-another-app-from-java-on-a -mac – Black

+0

'appDir' için tam olarak ne belirtiyorsunuz? –

cevap

0

steam: kayıtlı bir URL türüyse, org.eclipse.swt.program.Program#launch(String)'u kullanabilirsiniz. Örneğin: Sorun benim kendi kurulum çünkü

org.eclipse.swt.program.Program.launch("steam://rungameid/57300//");

+0

Bunun için teşekkürler. Sorunların yarısını çözüyor. Bunu uygulama paketinden iyi çalıştırabildim. Diğer yarısına gelince, belirttiğim için kötüyüm, ama her iki yönteme de ihtiyacım var (hem buhar hem de normal uygulama lansmanı), ama bu ilerleme! –

+0

Sadece uygulamaları başlatmak için bunu test ettim ve hem TextEdit'i hem de istediğim uygulamayı başlatabildim. Yani, temelde bu, "açık" ile nasıl olduğu gibi _ignored_ gibi görünmüyor. Bu şekilde argümanlar belirtmenin mümkün olup olmadığını biliyor musunuz? Ben bu sorunun dışında bıraktım çünkü ilgisiz görünüyordu, ama bunu kullanarak aynıları kullanamamıştım. Teşekkürler. –