eclipse中使用console报错java.lang.NullPointerException

本文探讨了在Java中使用Console类的常见问题,特别是在Eclipse IDE中遇到的空指针异常。文章详细解释了System.console()方法的行为,并提供了在不同环境下(如Eclipse和IntelliJ IDEA)使用Console的解决方案,同时介绍了替代的输入读取方法。

最近博主想重新学习一下Java,其中在学习Console使用时发现了问题。代码如下,十分简单:

import java.io.Console;
public class InputOutput {
	public static void main(String[] args) {
		Console cons=System.console();
		String name=cons.readLine("username:");
		char[] pwd=cons.readPassword("password:");
		System.out.println("name"+name+"pwd"+pwd.toString());
	}
}

但是不可思议的是这么几行代码运行竟然会有问题,问题如下:
在这里插入图片描述出错代码如下:
String name=cons.readLine("username:");
也就是说这里出现了空指针,问题应该出现在cons这个对象上,打印发现cons果然为null:
在这里插入图片描述觉得事情不太对劲,去查看了下API手册:
在这里插入图片描述红框中的意思简单来说就是System.console()方法与虚拟机是否具有控制台有关系,如果有,那么就可以使用,没有则该方法返回null。

那么为什么eclipse上不可以运行呢?
因为eclipse将应用程序作为后台进程运行,而不是作为带有系统控制台的顶级进程运行。也就是说System.console()在eclipse的机制下只会返回null,而在IDEA环境下可以正常运行。

替代console的方法

public class ReadingDemo {

public static void main(String[] args) {

    // ====  BufferedReader
    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    System.out.print("Please enter user name : ");
    String username = null;
    try {
        username = reader.readLine();
    } catch (IOException e) {
        e.printStackTrace();
    }
    System.out.println("You entered : " + username);
    // ===== In Java 5, Java.util,Scanner is used for this purpose.
    Scanner in = new Scanner(System.in);
    System.out.print("Please enter user name : ");
    username = in.nextLine();      
    System.out.println("You entered : " + username);
}
}
HTTP ERROR 500 java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "oldAlg" is null URI: /setup/setup-host-settings.jsp STATUS: 500 MESSAGE: java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "oldAlg" is null SERVLET: org.jivesoftware.openfire.admin.setup.setup_002dhost_002dsettings_jsp CAUSED BY: java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "oldAlg" is null Caused by: java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "oldAlg" is null at org.jivesoftware.util.JiveGlobals.setupPropertyEncryptionAlgorithm(JiveGlobals.java:1088) at org.jivesoftware.openfire.admin.setup.setup_002dhost_002dsettings_jsp._jspService(setup_002dhost_002dsettings_jsp.java:265) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:64) at javax.servlet.http.HttpServlet.service(HttpServlet.java:590) at org.eclipse.jetty.ee8.servlet.ServletHolder$NotAsync.service(ServletHolder.java:1160) at org.eclipse.jetty.ee8.servlet.ServletHolder.handle(ServletHolder.java:649) at org.eclipse.jetty.ee8.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1374) at com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:182) at com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:85) at org.eclipse.jetty.ee8.servlet.FilterHolder.doFilter(FilterHolder.java:171) at org.eclipse.jetty.ee8.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1348) at org.jivesoftware.util.LocaleFilter.doFilter(LocaleFilter.java:73) at org.eclipse.jetty.ee8.servlet.FilterHolder.doFilter(FilterHolder.java:171) at org.eclipse.jetty.ee8.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1348) at org.jivesoftware.util.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:38) at org.eclipse.jetty.ee8.servlet.FilterHolder.doFilter(FilterHolder.java:171) at org.eclipse.jetty.ee8.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1348) at org.jivesoftware.admin.PluginFilter.doFilter(PluginFilter.java:170) at org.eclipse.jetty.ee8.servlet.FilterHolder.doFilter(FilterHolder.java:171) at org.eclipse.jetty.ee8.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1348) at org.jivesoftware.admin.AuthCheckFilter.doFilter(AuthCheckFilter.java:290) at org.eclipse.jetty.ee8.servlet.FilterHolder.doFilter(FilterHolder.java:177) at org.eclipse.jetty.ee8.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1348) at org.jivesoftware.admin.ContentSecurityPolicyFilter.doFilter(ContentSecurityPolicyFilter.java:53) at org.eclipse.jetty.ee8.servlet.FilterHolder.doFilter(FilterHolder.java:171) at org.eclipse.jetty.ee8.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1348) at org.eclipse.jetty.ee8.servlet.ServletHandler.doHandle(ServletHandler.java:454) at org.eclipse.jetty.ee8.nested.ScopedHandler.handle(ScopedHandler.java:119) at org.eclipse.jetty.ee8.security.SecurityHandler.handle(SecurityHandler.java:497) at org.eclipse.jetty.ee8.nested.HandlerWrapper.handle(HandlerWrapper.java:108) at org.eclipse.jetty.ee8.nested.ScopedHandler.nextHandle(ScopedHandler.java:183) at org.eclipse.jetty.ee8.nested.SessionHandler.doHandle(SessionHandler.java:519) at org.eclipse.jetty.ee8.nested.ScopedHandler.nextHandle(ScopedHandler.java:181) at org.eclipse.jetty.ee8.nested.ContextHandler.doHandle(ContextHandler.java:885) at org.eclipse.jetty.ee8.nested.ScopedHandler.nextScope(ScopedHandler.java:152) at org.eclipse.jetty.ee8.servlet.ServletHandler.doScope(ServletHandler.java:423) at org.eclipse.jetty.ee8.nested.ScopedHandler.nextScope(ScopedHandler.java:150) at org.eclipse.jetty.ee8.nested.SessionHandler.doScope(SessionHandler.java:503) at org.eclipse.jetty.ee8.nested.ScopedHandler.nextScope(ScopedHandler.java:150) at org.eclipse.jetty.ee8.nested.ContextHandler.doScope(ContextHandler.java:830) at org.eclipse.jetty.ee8.nested.ScopedHandler.handle(ScopedHandler.java:117) at org.eclipse.jetty.ee8.nested.ContextHandler.handle(ContextHandler.java:1443) at org.eclipse.jetty.ee8.nested.HttpChannel$RequestDispatchable.dispatch(HttpChannel.java:1290) at org.eclipse.jetty.ee8.nested.HttpChannel.dispatch(HttpChannel.java:617) at org.eclipse.jetty.ee8.nested.HttpChannel.handle(HttpChannel.java:460) at org.eclipse.jetty.ee8.nested.ContextHandler$CoreContextHandler$CoreToNestedHandler.handle(ContextHandler.java:2512) at org.eclipse.jetty.server.handler.ContextHandler.handle(ContextHandler.java:1071) at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:151) at org.eclipse.jetty.server.Handler$Sequence.handle(Handler.java:805) at org.eclipse.jetty.server.Server.handle(Server.java:182) at org.eclipse.jetty.server.internal.HttpChannelState$HandlerInvoker.run(HttpChannelState.java:677) at org.eclipse.jetty.server.internal.HttpConnection.onFillable(HttpConnection.java:416) at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:322) at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:99) at org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53) at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:480) at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:443) at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:293) at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.run(AdaptiveExecutionStrategy.java:201) at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:311) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:981) at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1211) at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1166) at java.base/java.lang.Thread.run(Thread.java:833)
11-16
!SESSION 2025-08-11 13:41:01.459 ----------------------------------------------- eclipse.buildId=unknown java.version=1.8.0_172 java.vendor=Oracle Corporation BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=en_US Command-line arguments: -os win32 -ws win32 -arch x86 -clean !ENTRY org.eclipse.platform 2 0 2025-08-11 13:41:02.540 !MESSAGE Could not resolve module: org.eclipse.platform [204] Unresolved requirement: Require-Bundle: org.eclipse.ui.intro; bundle-version="[3.2.0,4.0.0)" !ENTRY org.eclipse.osgi 4 0 2025-08-11 13:41:02.540 !MESSAGE Application error !STACK 1 java.lang.NullPointerException at com.ami.veb.ui.VeBApplication.checkInstanceLocation(VeBApplication.java:493) at com.ami.veb.ui.VeBApplication.start(VeBApplication.java:280) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:380) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:235) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:648) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:603) at org.eclipse.equinox.launcher.Main.run(Main.java:1465)
08-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值