在企業級應用中,常需整合不同技術棧的元件。本文示範如何在 C# (Windows Forms) 應用程式中啟動並呼叫 Java 程式,透過批次檔包裝 java 指令,實現跨語言協作。
.class,由批次檔啟動comp.bat 編譯 Java、j.bat 執行 Javaprivate void CallJava(object sender, EventArgs e)
{
Process.Start("j.bat"); // 非阻塞啟動
}
若需等待結束或取得輸出,可使用 ProcessStartInfo 設定 RedirectStandardOutput。
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);
}
}
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 |
PATH 環境變數。chcp 65001,Java 端指定 -Dfile.encoding=UTF-8。Task.Run 或 BackgroundWorker 非同步啟動 Java 程式。透過 Process.Start 呼叫批次檔啟動 Java,是最簡單、耦合度最低的跨語言整合方式。搭配 C# 豐富的 UI 能力(漸層、動畫、自訂控制項),可快速建構整合型桌面應用。若需更緊密的互動,建議採用標準化通訊協定(HTTP/gRPC)將 Java 封裝為獨立服務。