当前位置:  开发笔记 > 编程语言 > 正文

Eclipse IDE中的java.io.Console支持

如何解决《EclipseIDE中的java.io.Console支持》经验,为你挑选了4个好方法。

我使用Eclipse IDE来开发,编译和运行我的Java项目.今天,我正在尝试使用java.io.Console该类来管理输出,更重要的是,用户输入.

问题是当应用程序"通过"Eclipse运行时System.console()返回null.Eclipse在后台进程上运行程序,而不是我们熟悉的控制台窗口的顶级进程.

有没有办法强制Eclipse将程序作为顶级进程运行,或者至少创建一个JVM将识别的控制台?否则,我被迫将项目放在jar上并在Eclipse外部的命令行环境中运行.



1> McDowell..:

我假设您希望能够使用Eclipse中的逐步调试.您可以通过在JRE类路径上的bin目录中设置构建的类来外部运行类.

java -cp workspace\p1\bin;workspace\p2\bin foo.Main

您可以使用远程调试器进行调试,并利用项目中构建的类文件.

在此示例中,Eclipse项目结构如下所示:

workspace\project\
                 \.classpath
                 \.project
                 \debug.bat
                 \bin\Main.class
                 \src\Main.java

1.在调试模式下启动JVM控制台

debug.bat是一个Windows批处理文件,应该从cmd.exe控制台外部运行.

@ECHO OFF
SET A_PORT=8787
SET A_DBG=-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=%A_PORT%,server=y,suspend=y
java.exe %A_DBG% -cp .\bin Main

在参数中,调试端口已设置为8787.在暂停= Y参数告诉JVM等到调试器附加.

2.创建调试启动配置

在Eclipse中,打开"调试"对话框("运行">"打开调试对话框...")并使用以下设置创建新的远程Java应用程序配置:

项目:您的项目名称

连接类型:标准(插座连接)

主持人: localhost

港口: 8787

3.调试

因此,您想要调试应用程序时所需要做的就是:

设定一个断点

在控制台中启动批处理文件

启动调试配置


您可以在错误122429中跟踪此问题.您可以使用此处所述的抽象层在您的应用程序中解决此问题.


这对我来说是最后一根稻草.如果我必须完成所有这些只是为了调试,我将切换回Netbeans.Eclipse中有如此多的未修复的错误和UI烦恼甚至都不好笑.

2> Laplie Ander..:

我使用的解决方法是在使用Eclipse时使用System.in/System.out而不是Console.例如,而不是:

String line = System.console().readLine();

您可以使用:

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
String line = bufferedReader.readLine();


我不认为你能用这种方式用密码屏蔽来读取密码.
...并且需要处理`IOException`,在`Console.readLine()`的情况下不会抛出.

3> Heath Border..:

发生这种情况的原因是因为eclipse将您的应用程序作为后台进程运行,而不是作为具有系统控制台的顶级进程运行.



4> 小智..:

你可以自己实现一个类.以下是一个例子:

public class Console {
    BufferedReader br;
    PrintStream ps;

    public Console(){
        br = new BufferedReader(new InputStreamReader(System.in));
        ps = System.out;
    }

    public String readLine(String out){
        ps.format(out);
        try{
            return br.readLine();
        }catch(IOException e)
        {
            return null;
        }
    }
    public PrintStream format(String format, Object...objects){
        return ps.format(format, objects);
    }
}

推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有