【问题标题】:Eclipse - Assigning each main method to a separate consoleEclipse - 将每个主要方法分配给单独的控制台
【发布时间】:2013-02-02 04:09:04
【问题描述】:

我目前正在编写一个程序,我想知道当我运行以下 main 方法时,eclipse 是否可以为每个 main 自动打开单独的控制台:

public static void main(String[] args) {
    object1.main(args);
    object2.main(args);
    object3.main(args);
    object4.main(args);
}

我当前的解决方案是运行每个主要方法并在“显示选定的控制台”选项中选择适当的方法来查看,尽管每次我想测试我的程序时这是一个非常乏味的过程。如果您有任何建议,我将不胜感激。

谢谢

【问题讨论】:

  • 感谢您的迅速回复。我的程序的目的是模拟一个服务器和多个客户端相互通信。因此 object1 将是服务器对象的开始,而 object2 之后是客户端。

标签: java eclipse console main


【解决方案1】:

如果您在另一个 main 方法中多次调用您的 main 方法,这与多次调用任何其他静态方法没有什么不同。特别是,您的程序的所有这些实例都将在同一个 JVM 中执行。

相反,您可以使用简单的Ant script 来启动程序的多个实例,例如:

<?xml version="1.0"?>
<project name="Test" default="run_external">
    <target name="compile">
        <delete dir="bin" />
        <mkdir dir="bin" />
        <javac srcdir="src" destdir="bin" />
    </target>
    <target name="run_many" depends="compile">
        <parallel>
            <java classname="test.Main" classpath="bin" />
            <!-- copy-paste 'java' block for more instances -->
        </parallel>
    </target>
    <target name="run_external" depends="compile">
        <parallel>
            <exec executable="xterm" dir="bin">
                <arg value="-e" />
                <arg value="java test.Main" />
            </exec>
            <!-- copy-paste 'exec' block for more instances -->
        </parallel>
    </target>
</project>

这个脚本定义了三个目标——它们中的哪一个被执行由default参数决定。

  • 第一个目标compile 只是调用javac 来构建src 目录中的所有源。这会在运行任何其他目标之前自动执行。
  • 第二个目标run_many 只是并行启动您的 Main 类几次。每个实例将在单独的 JVM 中运行,但所有这些实例的输出将在 Eclipse 的控制台窗口中混合。
  • 第三个目标run_external 启动一个运行各个Java 进程的xterm 终端仿真器,即,对于程序的每个实例,都应该弹出一个新终端。 (在 Windows 上执行此操作时,您可能必须使用 cmd.exe 或类似名称。)

不确定这是否是您要找的。希望这会有所帮助。

【讨论】:

  • 感谢详细的回复。我已经在一个简单的 helloworld 程序上尝试了你在 eclipse 中代码的后一个 run_external 部分,并且它可以工作,因为我事先在 .java 主程序上使用了 javac。问题是当我在 Eclipse 上运行它时,当我将可执行文件更改为“cmd”时,它只在控制台上运行而不是命令提示符。似乎将 cmd 的输出写到 eclipse 控制台上。另外,如果我要将它用于我的真实程序,我是否必须编写 ant 脚本来包含我拥有的每个类的 javac 命令?
  • @user1087943 我以为 Eclipse 会负责构建文件……没关系,我为此添加了另一个目标。这将在调用其他目标之前立即构建所有类。关于cmd 的问题:恐怕我在这里帮不了你,除非向你保证它可以使用xterm 或我尝试过的任何其他Linux 终端模拟器。
  • Eclipse 确实构建了这些文件,但它们位于远离 .java 文件的自己的文件夹中。为了使 ant 文件正常工作,我必须将 .class 文件移到 .java 文件旁边。您添加的代码似乎正在做 eclipse 已经在做的事情 - 编译 .class 文件并将它们存储在 bin 文件夹中。 ant 能否将 bin 文件夹中的 .class 文件与 src 文件夹中的 .java 文件关联起来?
  • @user1087943 好吧,我想你可以将javac destdir 设置为src。但是,使用 classpath=bindir=bin 脚本应该按照我发布的方式运行(至少它确实为我运行)。您将脚本放在哪里,以及如何调用它?它应该在 Eclipse 项目中,并通过 右键单击 -> 作为 ant 脚本运行 调用。
  • 您的代码现在可以正常工作了。这是因为我将 dir 属性更改为“src”,这意味着我必须编译该目录中的 .java 文件。我会再看看 cmd 问题。非常感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2020-09-17
  • 1970-01-01
  • 1970-01-01
  • 2021-07-02
  • 1970-01-01
  • 2012-03-04
  • 2014-10-17
  • 1970-01-01
相关资源
最近更新 更多