首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 呼叫 Java 程式實作指南:跨語言整合與 Process 啟動範例

     編輯:關於C語言

前言

在企業級應用中,常需整合不同技術棧的元件。本文示範如何在 C# (Windows Forms) 應用程式中啟動並呼叫 Java 程式,透過批次檔包裝 java 指令,實現跨語言協作。

架構概覽

  • C# 主程式:提供 UI、漸層背景、動畫面板、事件處理
  • Java 子程式:獨立編譯為 .class,由批次檔啟動
  • 批次檔:comp.bat 編譯 Java、j.bat 執行 Java

核心技術要點

1. Process.Start 啟動外部程序

private void CallJava(object sender, EventArgs e)
{
    Process.Start("j.bat"); // 非阻塞啟動
}

若需等待結束或取得輸出,可使用 ProcessStartInfo 設定 RedirectStandardOutput。

2. 自訂面板類別 (Inner Class) 實作動畫

public class AnimatedPanel : Panel
{
    private int x = 10, y = 200;
    private Timer timer;
    private Label lblMsg, lblMail;

    public AnimatedPanel()
    {
        Size = new Size(300, 230);
        Location = new Point(0, 10);
        BackColor = Color.Transparent;

        lblMsg = new Label
        {
            Text = "Hi...\nYou Know?\nWe are good Friends\nI can call Java ...",
            Size = new Size(250, 100),
            Font = new Font("Verdana", 15, FontStyle.Bold),
            ForeColor = Color.FromArgb(200, 10, 5, 225),
            BackColor = Color.Transparent,
            TextAlign = ContentAlignment.MiddleCenter
        };
        lblMail = new Label
        {
            Text = "mail me..\nmailm_uma@rediffmail.com",
            Location = new Point(10, 192),
            Size = new Size(160, 40),
            Font = new Font("Verdana", 7, FontStyle.Bold),
            ForeColor = Color.Yellow,
            BackColor = Color.Transparent
        };
        Controls.Add(lblMsg);
        Controls.Add(lblMail);

        timer = new Timer { Interval = 50 };
        timer.Tick += (s, e) =>
        {
            lblMsg.Location = new Point(x, y);
            y = (y == -100) ? 230 : y - 1;
        };
        timer.Start();
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);
        using (var brush = new LinearGradientBrush(ClientRectangle, Color.DarkOrange, Color.FromArgb(200, 10, 5, 225), LinearGradientMode.Vertical))
            e.Graphics.FillRectangle(brush, ClientRectangle);
    }
}

3. 主表單漸層背景繪製

private void Form_Paint(object sender, PaintEventArgs e)
{
    using (var brush = new LinearGradientBrush(
        new Rectangle(0, 0, 300, 300),
        Color.DarkOrange,
        Color.FromArgb(200, 50, 5, 200),
        LinearGradientMode.Vertical))
    {
        e.Graphics.FillRectangle(brush, ClientRectangle);
    }
}

完整專案結構

Project/
├── shesharp.cs          // C# 主程式
├── javasharp.java       // Java 程式 (需自行撰寫)
├── comp.bat             // javac javasharp.java
├── j.bat                // java javasharp
└── bin/                 // 編譯輸出目錄

批次檔範例

comp.bat

@echo off
javac javasharp.java
pause

j.bat

@echo off
java javasharp
pause

進階整合建議

需求建議方案
雙向資料交換StandardInput/Output 管線、Socket、命名管道、檔案共享
共用記憶體/高效能JNI (Java Native Interface) 或 JNA
微服務架構REST API、gRPC、Message Queue (RabbitMQ/Kafka)
同進程內嵌IKVM.NET (已停止維護)、GraalVM Polyglot API

常見問題排查

  • 找不到 java/javac:確認 JDK 安裝路徑已加入系統 PATH 環境變數。
  • 中文亂碼:批次檔加入 chcp 65001,Java 端指定 -Dfile.encoding=UTF-8。
  • UI 凍結:使用 Task.Run 或 BackgroundWorker 非同步啟動 Java 程式。
  • 權限不足:批次檔需以管理員身分執行,或調整工作目錄權限。

總結

透過 Process.Start 呼叫批次檔啟動 Java,是最簡單、耦合度最低的跨語言整合方式。搭配 C# 豐富的 UI 能力(漸層、動畫、自訂控制項),可快速建構整合型桌面應用。若需更緊密的互動,建議採用標準化通訊協定(HTTP/gRPC)將 Java 封裝為獨立服務。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved