Skip to content

System.console() is null when using an IDE #5

Description

@naverus

This error is triggered when trying to execute any logic by using any IDE(Idea, Eclipse, etc)

E.G. Execute UserInformation.java by using Idea/Eclipse and the following error will be triggered and no logic is being executed.

Caused by: java.lang.NullPointerException
	at com.convertapi.client.Http.getRequestBuilder(Http.java:62)
	at com.convertapi.client.Param.lambda$upload$1(Param.java:98)

Possible fix:


    static Request.Builder getRequestBuilder() {
        if (System.console() == null) {
            System.out.printf("VERSIJA: %s", Http.class.getPackage().getImplementationVersion());
        } else {
            System.console().printf("VERSIJA: %s", Http.class.getPackage().getImplementationVersion());
        }
        String agent = String.format("ConvertAPI-Java/%.1f (%s)", Http.class.getPackage().getImplementationVersion(), System.getProperty("os.name"));
        return new Request.Builder().header("User-Agent", agent);
    }

Activity

  1. JonasJasas commented on Jun 5, 2019

    @JonasJasas
    Contributor
  2. naverus commented on Jun 5, 2019

    @naverus
    Author

    @JonasJasas Please follow these steps:
    Preconditions

    • Open the project as a Maven Project by using a IDE(IntelliJ IDEA / Eclipse)

    Scenario 1

    • Move UserInformation.java to a valid package, let say com.convertapi.client.
    • Setup DefaultSecret on this class.
    • Execute this class by using the IDE .

    Current result in the console is:

    Exception in thread "main" java.lang.NullPointerException
    	at com.convertapi.client.Http.getRequestBuilder(Http.java:62)
    	at com.convertapi.client.ConvertApi.getUser(ConvertApi.java:89)
    	at com.convertapi.client.ConvertApi.getUser(ConvertApi.java:84)
    	at com.convertapi.client.examples.UserInformation.main(UserInformation.java:20)
    

    Scenario 2
    Also you can add an UnitTest and run it, so you will have same issue.
    Let say:

    package com.convertapi.client;
    import com.convertapi.client.model.User;
    import org.junit.Test;
    public class UserInformationTest {
        @Test
        public void verifyUserInformation()  {
            Config.setDefaultSecret("CONVERTAPI_SECRET");    //Get your secret at https://www.convertapi.com/a
            User user = ConvertApi.getUser();
    
            System.out.println("API Key: " + user.ApiKey);
            System.out.println("Secret: " + user.Secret);
            System.out.println("Email: " + user.Email);
            System.out.println("Name: " + user.FullName);
            System.out.println("Status: " + user.Status);
            System.out.println("Active: " + user.Active);
            System.out.println("Seconds left: " + user.SecondsLeft);
        }
    }
    

    And add this dependency:

            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
            </dependency>
    

    How to fix this issue
    The idea is that Console.istty is false(so System.console() will be null) when you run any logic by using an IDE, so this is why the the following code triggers always NullPointerException on these specified scenarios.

    System.console().printf

    Possible fix
    Just remove this line:

            System.console().printf("VERSIJA: %s", Http.class.getPackage().getImplementationVersion());
    

    or validate null.

            if (System.console() == null) {
                System.out.printf("VERSIJA: %s", Http.class.getPackage().getImplementationVersion());
            } else {
                System.console().printf("VERSIJA: %s", Http.class.getPackage().getImplementationVersion());
            }
    
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions