簡體   English   中英

為什么c#console命令沒有在java上運行?

[英]why c# console command not running on java?

誰能告訴我為什么這個c#console命令沒有在Java上運行?

我已經制作了一個C#控制台程序,如下所示:

using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
namespace face
{
    class Program
    {
        public static void Main(string[] args)
        {
            String path = args[0];
            byte[] imageBytes = File.ReadAllBytes(path);
            MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length);
            // Convert byte[] to Image
            ms.Write(imageBytes, 0, imageBytes.Length);
            Image image = Image.FromStream(ms, true);
            Bitmap S1 = new Bitmap(image);
            Console.WriteLine(S1.GetPixel(2, 10));
        }
    }
}

當我運行Program.exe image.jpg ,我得到:

顏色[A = 255,R = 128,G = 32,B = 128]

然后我創建了一個簡單的Java應用程序來運行Program.exe可執行文件:

class project 
{   
 public static void main(String[] args)
 {
    String comman="C:\\WINXP\\system32\\Program.exe Sunset.jpg";
    try 
    {
     Process process = Runtime.getRuntime().exec(comman);
     System.out.println(process.getOutputStream());
    } catch (Exception e) 
         {e.printStackTrace(System.err);}
 }
}

當我嘗試運行Java應用程序時,出現以下錯誤:

Program.exe遇到問題,需要關閉。 我們對造成的不便很抱歉。

你可能想改變

String comman = "C:\\WINXP\\system32\\Program.exe Sunset.jpg";

String[] comman = { "C:\\WINXP\\system32\\Program.exe", "Sunset.jpg" };

正如評論所說,這可能是因為C#程序無法打開文件:你應該為它指定一個絕對路徑,因為在這種情況下讓實際的工作目錄正常工作可能是一種不必要的痛苦。 在C#程序中捕獲異常也沒有什么壞處(例如對於“無參數”和“未找到文件”的情況)。

C#進程是java進程的子進程,自動終止,然后java VM終止。 因為進程是異步啟動的,所以會立即發生。 如果您對輸出感興趣,請更換

System.out.println(process.getOutputStream());

與(例如)

InputStream inputStream = process.getInputStream();
int c;
while ((c = inputStream.read()) >= 0) {
    System.out.print((char) c);
}

如果沒有,寫

process.getInputStream().close();
process.waitFor();

除了別人所說的,我不認為System.out.println(process.getOutputStream()); 將輸出您想要的內容 - 即執行的C#可執行文件的輸出。

System.out.println()沒有OutputStream重載,它是Process.getOutputStream()的返回類型。 所以將選擇System.out.println(Object)重載,它將調用OutputStream.ToString() ,這不是C#程序的輸出,但是(很可能在這里承擔我的)完全限定的類型名稱輸出流實例。

例如,查看 SO問題/答案以獲取更多信息。

您需要檢查您提供的exe和圖像文件的路徑。 當我檢查這段代碼並執行它時,我得到以下輸出java.io.BufferedOutputStream@c17164

在這里,我為您提供修改后的代碼

public class Test
{
    public static void main(String[] args)
    {
        String path="C:\\C#Sample\\ImageDisplayDemo\\ImageDisplayDemo\\bin\\Debug\\ImageDisplayDemo.exe E:\\Users\\Public\\Pictures\\Sample Pictures\\Desert.jpg";
        try
        {
            Process proc=Runtime.getRuntime().exec(path);
            System.out.println(proc.getOutputStream());
        }
        catch(Exception ex)
        {

        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM