Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

วิธีรันโปรแกรมภายนอก เช่น Windows Media Player ใน Java

วิธีที่ 1: ใช้ Runtime Class

คลาส java.lang.Runtime ให้ interface เข้ากับ environment ปัจจุบัน

  • getRuntime() - คืนค่า Runtime object ของแอปพลิเคชันปัจจุบัน
  • exec(String command) - รันคำสั่งในระบบปฏิบัติการ

ตัวอย่าง

import java.io.IOException;

public class RunExternalProgram {
    public static void main(String[] args) throws IOException {
        Runtime run = Runtime.getRuntime();
        System.out.println("Executing external program...");
        String file = "C:\\Program Files\\Windows Media Player\\wmplayer.exe";
        run.exec(file);
    }
}

วิธีที่ 2: ใช้ ProcessBuilder Class (แนะนำ)

ProcessBuilder ให้การควบคุมมากกว่า: redirect I/O, environment variables, working directory

ตัวอย่างพื้นฐาน

import java.io.IOException;

public class ExternalProcess {
    public static void main(String[] args) throws IOException {
        String command = "C:\\Program Files\\Windows Media Player\\wmplayer.exe";
        String arg = "D:\\sample.mp3";
        
        ProcessBuilder builder = new ProcessBuilder(command, arg);
        System.out.println("Executing external program...");
        builder.start();
    }
}

ตัวอย่างขั้นสูง: จัดการ Output/Error

ProcessBuilder builder = new ProcessBuilder("cmd.exe", "/c", "dir");
builder.directory(new File("C:\\")); // Working directory
builder.redirectOutput(ProcessBuilder.Redirect.to(new File("output.txt")));
builder.redirectError(ProcessBuilder.Redirect.to(new File("error.txt")));

Process process = builder.start();
int exitCode = process.waitFor();
System.out.println("Exit code: " + exitCode);

การเปรียบเทียบ

คุณสมบัติRuntime.exec()ProcessBuilder
ความง่ายสูงปานกลาง
Redirect I/Oยากง่าย (redirectOutput/Error)
Environment Variablesไม่ได้ได้ (environment() map)
Working Directoryไม่ได้ได้ (directory())
Command Argumentsรวมในสตริงเดียวแยกเป็น list/varargs

ข้อควรระวัง

  • Path ที่มี space ต้อง escape หรือใช้ ProcessBuilder แยก argument
  • บน Linux/Mac ใช้ path แบบ Unix (เช่น /usr/bin/vlc)
  • ควรจัดการ Process object: read input/error stream, waitFor()
  • Java 9+ มี ProcessHandle สำหรับจัดการ process ดีกว่า