【问题标题】:Java: run method in a new ConsoleJava:在新控制台中运行方法
【发布时间】:2016-06-14 21:52:37
【问题描述】:

在我正在开发的 Java 应用程序中,我需要在新的控制台中启动一个方法:在运行应用程序时,我想调用一个方法并在一个新的单独控制台中执行其内容:可以吗?

提前致谢

【问题讨论】:

  • 没有。一个新的控制台需要一个新的进程,这意味着它需要一个新的程序,而不仅仅是一个新的方法。
  • 那么您建议什么样的解决方案?目前该方法实际上是一个类,可能是一个不同的程序......我的目标是从第一个开始启动新程序+新控制台,类似于方法调用......我不希望用户启动2 个手动程序
  • 将其他代码放入一个新 jar 中,以便您可以使用 java -jar newjar.jar 运行它,然后根据您的操作系统按照此处所述运行它:Open a new prompt/terminal window from Java
  • 我正在尝试这两种方法但它不起作用:打开了一个新终端但没有执行任何命令并且没有打开jar...try { Runtime.getRuntime().exec("/usr/bin/open -a Terminal /Users/.../src/temp.jar"); } catch (IOException e) { e.printStackTrace(); } / / String[] argS = new String[] {"/bin/bash", "-c", "java", "-jar", "/Users/.../src/temp.jar"}; try { Process proc = new ProcessBuilder(argS).start(); } catch (IOException e) { e.printStackTrace(); }

标签: java console


【解决方案1】:

可以通过创建一个负责执行该方法的新进程 (java.lang.Process)。但是因为一个进程只能调用main()而不能调用某个类的单独方法,所以你需要将你想要的方法包装到另一个类中:

public class SecondClass {
    public static void main(String[] args) {
        // if it's static
        FirstClass.yourMethod(...);
        // if it's non-static
        new FirstClass().yourMethod(...);
    }
}

然后通过使用 ProcessBuilder 类或 Runtime.exec(),调用 SecondClass 的 main() 方法

Process p = new ProcessBuilder("java -cp [...] SecondClass").start();

Process p = Runtime.getRuntime().exec("[as above]");

你得到了流程实例。将该代码放入 FirstClass

【讨论】:

  • 我要执行的方法实际上是我以Jar格式导出的一个新类的主要方法。我正在尝试这两种方法但它不起作用:打开了一个新终端但没有执行任何命令并且没有打开jar...try { Runtime.getRuntime().exec("/usr/bin/open -a Terminal /Users/.../src/temp.jar"); } catch (IOException e) { e.printStackTrace(); } / / String[] argS = new String[] {"/bin/bash", "-c", "java", "-jar", "/Users/.../src/temp.jar"};try { Process proc = new ProcessBuilder(argS).start(); } catch (IOException e) { e.printStackTrace(); }
  • 您使用的是 Linux 吗?您在那里找到的提示适用于 UNIX 系统。您需要将分隔符从“/”更改为“\”。您输入与调用 jar 基本相同的命令。通常是“java -jar -cp[classpath] JAR_NAME.jar”
  • @PhilEvening -jar-cp 是互斥的。 MANIFEST.MF 文件在您提供-jar 时控制类路径,因此-cpCLASS_PATH 环境变量将被忽略。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-19
  • 2014-11-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多