2012-12-12 37 views
8

Tôi muốn viết một chương trình Java khởi chạy chương trình (ví dụ: Firefox) trong máy khách VirtualBox. Máy chủ là Windows và khách là Ubuntu. Theo tài liệu SDK, bạn có thể thực hiện việc này. Đây là nỗ lực của tôi trong Java dựa trên những gì tôi đã nhìn thấy trong tài liệu (điều này giả VM được lên và chạy):VirtualBox: Sử dụng API SDK để khởi chạy chương trình trong ứng dụng khách?

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(); 

Khi tôi chạy này, tôi nhận được:

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) 

tôi đã thử các tùy chọn khác nhau với các khóa và phiên, nhưng luôn có một số loại lỗi. Nếu tôi đặt LockType thành Write, tôi gặp lỗi "Không thể gán máy cho phiên".

Có ai đã làm điều này không? Có bất kỳ hướng dẫn Java VirtualBox rắn trực tuyến nào không? Tôi không thể tìm thấy bất kỳ thứ gì với Google.

Bất kỳ lời khuyên nào được đánh giá cao.

+0

Bạn đã tìm thấy một @TrentCoder sửa chữa? – aandis

Trả lời

0

Tôi cũng không biết cách làm điều đó với SDK. Nhưng bạn đã thử gửi lời khen qua SSH tới máy ảo chưa? Sue bạn cần phải thiết lập mạng và tất cả điều đó, nhưng nó sẽ là một lựa chọn tốt, vì thiếu tài liệu VirtualBox SDK làm cho nó phức tạp để lưu trữ.

0

Bạn đã cố đợi cho đến khi phiên khách bắt đầu. Trong trường hợp của bạn này nên được một cái gì đó như thế này

guestSession = guest.CreateSession (....

guestSession.waitFor (1L, 0l)

+0

Bạn có nghĩa là 'GuestSessionWaitForFlag_Start' thay vì' 1L'? –

+0

Có. Tôi có cùng một công việc và quá trình bắt đầu khi ứng dụng của tôi chờ phiên khách đang ở trạng thái bắt đầu. Khi tôi nhận xét trạng thái phiên khách chờ waitFor (hoặc waitForArray) sẽ là Lỗi: Có thể, bạn phải thử các Cờ khác nhau. Ví dụ: gắn cờ GuestSessionWaitForFlag_Status (hoặc 4L) để chờ cho đến khi trạng thái phiên được thay đổi – Sergey

Các vấn đề liên quan