2012-03-28 84 views
1

我正在使用C#爲Kinect開發一些程序。 C#沒有Java的機器人來模擬擊鍵或鼠標動作,所以我爲此使用了Java。目前,我正在創建.jar文件並嘗試從C#應用程序運行它們(儘管我懷疑有更好的方法可以做到這一點)。我這樣做的方法是把這個線在我的C#代碼:.jar在從C#程序啓動時不會運行

System.Diagnostics.Process.Start("CMD.exe", java -jar C:\\Users\\Me\\RobotProgram.jar"); 

這工作正常,在一個小的,基本的C#應用​​程序:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      System.Diagnostics.Process.Start("CMD.exe", "/c java -jar C:\\Users\\Me\\RobotProgram.jar"); 
     } 
    } 
} 

但是,當它在一個更復雜的程序,使用Kinect相機,它不會工作。控制檯閃爍顯示「VM java/lang/NoClassDefFoundError:java/lang/Object初始化期間發生錯誤」。

+0

看起來像Java標準庫未正確加載。嘗試將其添加到Java解釋器開關。 – m0skit0 2012-03-28 15:37:23

+0

對不起,當你說把它添加到Java解釋器開關時,你是什麼意思?添加什麼? – user1002973 2012-04-02 18:25:55

回答

0

Java項目可能正在尋找工作目錄中的必需文件。嘗試在啓動之前設置工作目錄。

Directory.SetCurrentDirectory("C:\\Users\\Me"); 
System.Diagnostics.Process.Start("CMD.exe", "/c java -jar C:\\Users\\Me\\RobotProgram.jar"); 
+0

VM查找的文件是基本類(例如java.lang.Object,請參閱錯誤消息) - 更改到工作目錄不會解決問題 – Attila 2012-03-28 18:11:04

0

你有你的JAVA_HOME環境變量在複雜的程序運行環境設置是否正確?

錯誤指向空/錯JAVA_HOME,因爲即使找不到基類

+0

我不確定這是什麼意思。我的標準Java環境變量設置正確,但我不確定我是否理解你在「複雜程序運行的環境中」設置的含義。我該怎麼做才能檢查這個? – user1002973 2012-03-28 16:19:31

+0

你可以從你的應用程序執行'echo%JAVA_HOME%>'這樣的命令(其中''是捕獲echo命令輸出的文件路徑 - '>'是重定向操作符,採取標準輸出並將其重定向到一個文件) - 就像你使用'java'命令一樣。然後將該文件的內容與您期望看到的環境變量'JAVA_HOME'的值進行比較。 – Attila 2012-03-28 16:28:59

+0

對不起,如果我速度很慢,我試過了,它只是將「%JAVA_HOME%」打印到文本文件中。 – user1002973 2012-03-28 18:03:44