>  기사  >  Java  >  플랫폼 독립성을 갖춘 별도의 프로세스에서 Java 애플리케이션을 실행할 수 있습니까?

플랫폼 독립성을 갖춘 별도의 프로세스에서 Java 애플리케이션을 실행할 수 있습니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-03 17:17:03920검색

Can Java Applications Be Executed in Separate Processes with Platform Independence?

플랫폼 독립성을 갖춘 별도의 프로세스에서 Java 애플리케이션 실행

Java 개발 영역에서는 애플리케이션을 별도의 프로세스에서 실행하는 동시에 플랫폼 독립성을 유지합니다. 이는 다음과 같은 질문을 제기합니다. 플랫폼 제한을 초월하여 정규화된 이름을 지정하여 Java 애플리케이션을 별도의 프로세스에 로드할 수 있습니까?

현재 제한

전통적으로 Java 애플리케이션은 플랫폼별 명령을 호출하는 Runtime.getRuntime().exec(COMMAND) 메서드를 사용하여 실행됩니다. 이 접근 방식은 교차 플랫폼 호환성에 대한 과제를 제시합니다.

이상적인 솔루션

이상적인 시나리오에는 애플리케이션 클래스 이름을 받아들이고 이를 실행하는 단순화된 메서드가 포함됩니다. 다음 구성의 예시처럼 별도의 프로세스:

EXECUTE.application(CLASS_TO_BE_EXECUTED);

플랫폼 독립적 접근법

이전 응답에서 영감을 얻어 Java의 시스템 속성을 활용하여 플랫폼 독립적인 방식으로 Java 명령 경로 및 클래스 경로에 관한 중요한 정보를 얻을 수 있습니다. 다음 코드 조각은 이 접근 방식을 보여줍니다.

public final class JavaProcess {

    private JavaProcess() {}        

    public static int exec(Class klass, List<String> args) throws IOException,
                                               InterruptedException {
        String javaHome = System.getProperty("java.home");
        String javaBin = javaHome +
                File.separator + "bin" +
                File.separator + "java";
        String classpath = System.getProperty("java.class.path");
        String className = klass.getName();

        List<String> command = new LinkedList<>();
        command.add(javaBin);
        command.add("-cp");
        command.add(classpath);
        command.add(className);
        if (args != null) {
            command.addAll(args);
        }

        ProcessBuilder builder = new ProcessBuilder(command);

        Process process = builder.inheritIO().start();
        process.waitFor();
        return process.exitValue();
    }

}

이 메서드를 호출하려면 간단한 명령을 사용합니다.

int status = JavaProcess.exec(MyClass.class, args);

문자열 표현 대신 실제 클래스를 전달하면 이 접근 방식이 성공하려면 클래스가 이미 클래스 경로에 있어야 한다는 사실을 활용하세요.

위 내용은 플랫폼 독립성을 갖춘 별도의 프로세스에서 Java 애플리케이션을 실행할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.