为啥在Eclipse下使用System.console().readLine()获取控制台输入时提示java.lang.NullPointerException

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥在Eclipse下使用System.console().readLine()获取控制台输入时提示java.lang.NullPointerException相关的知识,希望对你有一定的参考价值。

public class Test
public static void main(String args[])
while(true)
String str=System.console().readLine();
System.out.println(str);


语句本身是没有错的。问题的关键是这段代码若是在eclipse的运行就会有问题,而如果你用命令行的方式,先编译后运行就没有问题了。

以下是我在java高手真经第272页上看到的专业解释。
"虚拟机是否具有控制台取决于底层平台,还取决与虚拟机的方式,如果虚拟机从一个交互式命令行开始启动,且没有重定向标准输入和输出流,那么其控制台将存在,通常连接到键盘并从虚拟机启动的地方显示。如果虚拟机是自启动的(例如,有后台作业调度程序启动),那么他通常没有控制台。如果此虚拟机具有控制台,那么他将由此类唯一的实例。如果没有可用的控制台设备,那么对该方法的调用将返回null"
这就是为什么这段代码只能在控制台中执行,而不能在eclipse中运行。
参考技术A 那是以为控制台的console为空,所以会报空指针异常。
public class Test
public static void main(String args[])
//测试一下是否为空,如果为空就返回,如果不为空进行循环输出
Console console=System.console();
if(console==null)
System.out.println("不能使用控制台");
return;

while(true)
String str=System.console().readLine();
System.out.println(str);


本回答被提问者采纳

为啥在调试模式下启动 GWT 时,我的断点不会中断

【中文标题】为啥在调试模式下启动 GWT 时,我的断点不会中断【英文标题】:Why when starting GWT in debug mode, my break points don't break为什么在调试模式下启动 GWT 时,我的断点不会中断 【发布时间】:2010-10-31 22:23:45 【问题描述】:

我正在使用带有最新 GWT 的 Eclipse 3.4.2。 IDE 甚至不会自动切换到 Debug Perspective。

【问题讨论】:

提供更多信息会不会很痛苦??? 实际上,我只是在尝试 GWT 教程中的 StockWatcher 示例。它与运行和调试完美运行。但是,它不会在调试模式下中断。我测试了运行纯 Hello World 类型的 Java 应用程序。我设置断点没有问题。我的 Google eclipse 插件版本是否可能对于 eclipse 来说太旧了?但是,我刚刚从两者下载了最新的。 也有同样的问题。我正在使用 Eclipse Juno 版本 4.2.0 和 JDK 1.7.0_13。两者都是今天下载的,我在同一个示例应用程序中被困在完全相同的位置。我使用的是 Windows 7 64 位。 也有同样的问题。我调试的时间最长。现在,在没有 JDK 或 GWT 更改之后,它不会在断点处停止。 很高兴知道我不是唯一一个。 Java 1.7.0_25-b17 和 GWT 2.3(本项目需要使用旧版本) 【参考方案1】:

您是否在hosted mode 中启动您的 GWT 应用程序?

您将花费大部分开发时间在托管模式下运行您的应用程序,这意味着您正在与您的 GWT 应用程序进行交互而没有将其转换为 JavaScript。 每当您从 Java 集成开发环境 (IDE) 编辑、运行和调试应用程序时,您都是在托管模式下工作。 当应用程序在托管模式下运行时,Java 虚拟机 (JVM) 实际上将应用程序代码作为编译后的 Java 字节码执行,并使用 GWT 管道来自动化嵌入式浏览器窗口。 这意味着您的 IDE 的调试工具可用于调试您的客户端 GWT 代码和任何服务器端 Java 代码。


提示:如果您使用的是 Eclipse,您还可以在使用 applicationCreator 使用 -eclipse 标志创建新项目时创建启动配置文件。

如果您没有使用applicationCreator 创建特定于应用程序的托管模式shell 脚本,您可以手动运行com.google.gwt.dev.GWTShell 中的主类(取决于您的操作系统)在gwt-dev-windows.jargwt-dev-linux.jar、或gwt-dev-mac.jar

重要提示:如果您不使用生成的<module>-shell 脚本,请注意在托管模式下,GWT 开发外壳会使用 JVM 的类路径查找模块(并因此查找客户端源代码)。确保首先在类路径中添加源目录。


另见Debug in Hosted Mode

(来源:googlecode.com)

【讨论】:

【参考方案2】:

我还关注GWT 网站上的StockWatcher 指南,然后进入教程的Debugging 部分,我可以触发断点,直到我偶然发现SDBG 插件。我安装了插件并按照视频进行了操作!

我的环境:

Eclipse Neon.1a 版本 (4.6.1) JDK 1.7.0_80 GWT SDK 2.7.0

补充说明:

确保进行 Debug 配置并使用 com.google.gwt.dev.DevMode 作为您的 Main 类。

【讨论】:

【参考方案3】:

这些天,似乎不再支持 GWT 经典开发模式,或者至少 not recommended。它已被 GWT 超级开发模式所取代,该模式在 Javascript 中运行您的代码,而不是在 JVM 上。这意味着您调试in your browser,而不是在Eclipse 中。例如,我在 Chrome 中访问了我的网站,打开了开发者工具,切换到源选项卡,然后在 sourcemaps 文件夹下查找我所有的 Java 类。我可以在那里设置断点,当 Javascript 等价物运行时,浏览器将停止。我可以检查与我的 Java 变量大致匹配的 Javascript 变量。

如果您真的更喜欢在 Eclipse 中进行调试,您可以使用Super Dev Mode Debugger Eclipse plugin,但它的作用与 Chrome 调试器相同。当我尝试它时,我必须观看视频才能让它发挥作用。

【讨论】:

【参考方案4】:

我遇到了同样的问题。就我而言,问题在于我使用的是 JRE 而不是 JDK。设置 JDK 而不是 JRE,解决了我的问题。我建议查看构建配置以查看正在使用的配置。

【讨论】:

仅供参考以更改为 JDK 我必须通过Window : Preferences : Java : Installed JREs : Add ...添加它【参考方案5】:

更改 JDK 对我的情况没有帮助,但我终于发现了问题所在。

从 GWT 1.7 迁移到 2.0 时,旧的 GWT 类将保留在战争输出中。必须手动删除它们才能启动 2.0。

【讨论】:

【参考方案6】:

升级到 jdk1.6.0_17 - 工作正常

【讨论】:

【参考方案7】:

同时确认调试器不适用于 1.6.0_14。降级到 1.6.0_13 解决了我的问题。 Farinha,即使您已安装 1.6.0_13,您的 java_home(或类似的东西)是否仍指向安装 1.6.0_14?

【讨论】:

【参考方案8】:

我正在运行 1.6.0_13,但调试仍然无法正常工作。它只是没有达到断点。 此外,页面在托管模式下显示为空白(HTML 文件中的静态内容除外),但在浏览器上运行时一切正常显示和工作。

java -版本 java版本“1.6.0_13” Java(TM) SE 运行时环境(build 1.6.0_13-b03)

【讨论】:

【参考方案9】:

我想确认,基本上,JDK 1.6.0_14 在 Eclipse 调试模式下无法与 GWT 一起使用。切换不同的 JDK 即可。

我安装了 JDK 1.6.0_13 并启动了 eclipse 调试透视图。 使用eclipse 3.3.2

感谢您的提示!

【讨论】:

【参考方案10】:

我在讨论我的问题的小组中发现了一个不同的线程。

http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/a9b553a6df5da5b8/65298c48c32deac0?lnk=raot&pli=1

基本上,JDK 1.6.0_14 不能在 Eclipse 调试模式下与 GWT 一起使用。切换不同的 JDK 即可。

【讨论】:

JDK 1.6.0_12 出现同样问题并更新到 13,但问题仍然存在。

以上是关于为啥在Eclipse下使用System.console().readLine()获取控制台输入时提示java.lang.NullPointerException的主要内容,如果未能解决你的问题,请参考以下文章

为啥eclipse加载不了jar包

为啥当我明确告诉 Eclipse 使用特定的 JDK 运行时,它使用特定的 JRE 运行?

为啥电脑进eclipse就重启?

为啥我的eclipse怎么没有新建java project选项

为啥eclipse中不能选择tomcat服务器

为啥eclipse每次新建项目时都会出现一个错误弹窗,并会在src下自动生成module-info.java文档?