11

我想编写一个在 VirtualBox 客户机中启动程序(例如:Firefox)的 Java 程序。主机是 Windows,来宾是 Ubuntu。根据 SDK 文档,应该可以做到这一点。这是我根据我在文档中看到的在 Java 中的尝试(假设 VM 已启动并正在运行):

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

当我运行它时,我得到:

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)

我已经尝试过使用锁和会话的不同选项,但总是会出现某种类型的错误。如果我将 LockType 设置为 Write,我会收到“无法将机器分配给会话”错误。

有人做过吗?在线有可靠的 Java VirtualBox 教程吗?我用谷歌找不到任何东西。

任何建议表示赞赏。

4

2 回答 2

1

您是否尝试过等到访客会话开始。在你的情况下,这应该是这样的

来宾会话 = 来宾.CreateSession(....

guestSession.waitFor(1L, 0L)

于 2014-05-28T22:00:52.310 回答
1

我也不知道如何使用 SDK。但是您是否尝试过通过 SSH 将推荐发送到虚拟机?苏,您需要设置网络和所有这些,但这将是一个不错的选择,因为缺少 VirtualBox SDK 文档使得归档变得复杂。

于 2013-07-27T10:06:19.700 回答