2013-05-03 108 views
0

我有兩個projects-try.java和another.java。我想從try.java無法運行另一個java項目

再跑,JAVA這裏是我的another.java

package another; 

public class Another { 

    public static void main(String[] args) 
    { 
     System.out.println("Another Java Project"); 
    } 
} 

代碼這裏是mycode的用於try.java

package pkgtry; 

import java.io.BufferedReader; 
import java.io.InputStream; 
import java.io.InputStreamReader; 

public class Try 
{ 
    private static void printLines(String name, InputStream ins) throws Exception { 
    String line = null; 
    BufferedReader in = new BufferedReader(new InputStreamReader(ins)); 
    while ((line = in.readLine()) != null) 
    { 
     System.out.println(name + " " + line); 
    } 
} 

private static void runProcess(String command) throws Exception 
{ 
    Process pro = Runtime.getRuntime().exec(command); 
    printLines(command + " stdout:", pro.getInputStream()); 
    printLines(command + " stderr:", pro.getErrorStream()); 
    pro.waitFor(); 
    System.out.println(command + " exitValue() " + pro.exitValue()); 
} 

public static void main(String[] args) 
{ 
    try 
    { 
     runProcess("javac C:\\Users\\owner\\Documents\\NetBeansProjects\\try\\src\\pkgtry\\Another.java"); 
    runProcess("java C:\\Users\\owner\\Documents\\NetBeansProjects\\try\\src\\pkgtry\\Another"); 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
} 
} 

運行嘗試後。 java它沒有打印任何東西。它只是在netbeans上打印成功。但一類Another.cass已創建

任何人都可以幫我嗎?

+1

您需要將Another.java目錄添加到您的類路徑中,或將完全限定的路徑預先添加到Another.java。 – 2013-05-03 05:51:59

+0

@HarshalPandya:編譯器不會查找類路徑中命令行上指定的* source *文件。 – 2013-05-03 05:56:35

+0

@JonSkeet:當然,那是非常真實的。類路徑是一個愚蠢的建議。 – 2013-05-03 12:21:11

回答

0

它看起來像Another.java不在您運行代碼的目錄中。特別是,你管理調用javacjava,它看起來像都收到你指定的參數 - 但它找不到Another.java

此外,您需要提供的完全限定類名java,在這種情況下是another.Another,因爲它是在another包。這也意味着你需要以這樣一種方式編譯它,將類文件保存在適當的目錄結構中。

所以你想要的東西,如:

runProcess("javac -d . path/to/Another.java"); 
runProcess("java another.Another"); 

(其中path/to/Another.java或者是一個絕對的文件名或一個相對於工作目錄。)

-d .會告訴javac建立植根於一個目錄結構輸出文件的當前工作目錄。

編輯:現在我們知道你正在運行,你可以使用:

runProcess("javac -d . src/pkgtry/Another.java"); 
runProcess("java another.Another"); 

請注意,您應該保持你的源文件夾中的組織結構相匹配的封裝結構,所以它應該是在一個名爲another的目錄中,而不是pkgtry

+0

沒有亞爾。它不工作。運行後我得到了相同的結果 – gela 2013-05-03 06:18:48

+0

@gela:然後你沒有正確指定'Another.java'的路徑。不幸的是,您還沒有告訴我們任何關於您如何運行代碼的信息,這很難幫助您。您可能想要將當前目錄轉儲到控制檯以查看您正在運行的位置:System.out.println(new File(「。」)。getAbsolutePath())' – 2013-05-03 06:20:35

+0

當我運行System.out.println(new File(「。」)。getAbsolutePath())在Try .java中給出C:\ Users \ owner \ Documents \ NetBeansProjects \ try \。 – gela 2013-05-05 09:14:29

0

java編譯器試圖找到包pkgtry中的Another.java文件。如果你把這兩個文件放在一個包中,那麼你將能夠達到預期的效果。

public static void main(String[] args) 
{ 
    try 
    { 
    runProcess("javac Another.java"); 
    runProcess("java Another"); 
    } 
    catch (Exception e) 
    { 
    e.printStackTrace(); 
    } 
} 
+0

不,它試圖在任何運行進程的地方找到'Another.java' - 這是我們不知道的。 – 2013-05-03 06:00:29

+0

您應該添加一個單獨的代碼塊來查找Another.java文件,然後在此處提供完整的路徑。 – Joshi 2013-05-03 06:02:27

+0

public static void main(String [] args){ 嘗試runProcess(「javac C:/Users/owner/Documents/NetBeansProjects/another/src/another/Another.java」); runProcess(「java C:/ Users/owner/Documents/NetBeansProjects/another/src/another/Another」); (例外e){ e.printStackTrace(); } } – gela 2013-05-03 06:09:42

0

什麼做這樣的:

try 
    { 
    runProcess("cd C:\\Users\\owner\\Documents\\NetBeansProjects\\try\\src\\pkgtry); 
    runProcess("javac Another.java"); 
    runProcess("java Another"); 
    } 

是否有任何機會,它可能工作方式?

+0

我在runProcess(「cd C:\\ Users \\ owner \\ Documents \\ NetBeansProjects \\ try \\ src \\ pkgtry)行中收到錯誤; – gela 2013-05-08 08:22:34

+0

錯誤是什麼? – sha1 2013-05-08 09:41:27