2012-12-12 6 views
8

Bir VirtualBox konuk makinesinde bir programı (örn: Firefox) başlatan bir Java programı yazmak istiyorum. Ev sahibi Windows ve misafir Ubuntu. SDK belgelerine göre, bunu yapmak mümkün olmalıdır. İşte belgelerinde gördüğüm dayalı Java benim girişimi (bu VM varsayar yukarı ve koşma) 'dir:VirtualBox: Misafirte bir program başlatmak için SDK API'yı kullanıyor musunuz?

String machineName = "MyMachine"; 
String url = "http://localhost:18083"; 
String user = ""; 
String passwd = ""; 

VirtualBoxManager mgr = VirtualBoxManager.createInstance(null); 
mgr.connect(url, user, passwd); 
IVirtualBox vbox = mgr.getVBox(); 
System.out.println("Running VirtualBox version " + vbox.getVersion()); 

IMachine machine = vbox.findMachine(machineName); 
ISession session = mgr.getSessionObject(); 
machine.lockMachine(session, LockType.Shared); 
IConsole console = session.getConsole(); 
IGuest guest = console.getGuest(); 

IGuestSession guestSession = guest.createSession("bob","password", "", ""); 
guestSession.processCreate("/usr/bin/firefox", null, null, null, 0L); 

session.unlockMachine(); 

ben bu çalıştırdığınızda, alıyorum:

Exception in thread "main" org.virtualbox_4_2.VBoxException: VirtualBox error: The session is not locked (session state: Unlocked) (0x8000FFFF) 
at org.virtualbox_4_2.ISession.getConsole(ISession.java:145) 
at Test1.main(Test1.java:27) 

I kilitler ve oturumlar ile farklı seçenekler denediniz, ancak her zaman bir çeşit hata yapınız. LockType'ı Write olarak ayarladıysam, "Makineyi oturuma atamadı" hatası alıyorum.

kimse bu yapılır mı? Çevrimiçi herhangi bir katı Java VirtualBox öğreticisi var mı? Google ile hiçbir şey bulamıyorum.

Herhangi bir tavsiye takdir edildi.

+0

bir düzeltme @TrentCoder buldunuz mu? – aandis

cevap

0

Ayrıca SDK ile nasıl yapılacağını da bilmiyorum. Ancak, sanal makineye no'lu SSH no'lu postayı göndermeyi denediniz mi? Sue, ağı kurmanız gerekiyor ve tüm bunlar için iyi bir alternatif olurdu, çünkü VirtualBox SDK belgelerinin olmaması arşivlemeyi karmaşık hale getiriyor.

0

Konuk oturumu başlatılana kadar beklemeye çalıştınız. Senin durumunda böyle bir şey olmalı bu

guestSession = guest.CreateSession (....

guestSession.waitFor (1L, 0L)

+0

'1L' yerine GuestSessionWaitForFlag_Start' mı demek istiyorsunuz? –

+0

Evet. Uygulamamın oturumun başlatıldığını beklediğimde aynı işi ve süreci başlatacağım.Konumu beklerken waitFor (veya waitForArray) konuk oturumu durumu Hata durumunda, muhtemelen farklı Bayrakları denemek zorundasınız, örneğin, GuestSessionWaitForFlag_Status Oturum durumu değiştirilinceye kadar beklemek için (veya 4L) – Sergey