InputStreamReader抛出NullPointerException

时间:2018-03-02 11:48:37

标签: java maven nullpointerexception google-cloud-platform inputstreamreader

首先,下面的代码段是Google Cloud Project应用程序的一部分,并且在我的本地客户端上运行,该客户端是Raspberry Pi 1.为了能够将连接到Pi的传感器的数据发送到云端需要授权。所有需要的客户机密都存储在" client_secrets.json"在src / main / resources中。

项目层次结构

enter image description here

尝试使用客户端机密来授权下面的代码时会抛出NullPointerException。它是班级的一部分" CmdLineAuthenticationProvider" (参见项目层次结构)。

InputStreamReader reader = new InputStreamReader(getClass().getClassLoader().getResourceAsStream(this.clientSecretsFile));

这可能只是一个与路径相关的错误,但我没有尝试解决它的问题(我试图调整路径并将client_secrets.json复制到不同的位置,希望它能找到它)。 " clientSecretsFile"设置为" /client_secret.json"在" RaspiApp"类。

CmdLineAuthenticationProvider provider = new CmdLineAuthenticationProvider();

    provider.setClientSecretsFile("client_secret.json");
    provider.setScopes(SCOPES);

    // get the oauth credentials using the client secrets
    Credential credential = provider.authorize();

在我的pom.xml中,我按如下方式指定了资源:

<sourceDirectory>src/main/java</sourceDirectory>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <targetPath>${project.build.directory}/classes</targetPath>
            <filtering>false</filtering>
            <excludes>
                <exclude>**/*.java</exclude>
            </excludes>
        </resource>
    </resources>

完整的错误代码:

java.lang.NullPointerException
    at java.io.Reader.<init>(Reader.java:78)
    at java.io.InputStreamReader.<init>(InputStreamReader.java:72)
    at de.econfood.pi.app.CmdLineAuthenticationProvider.getCredential(CmdLineAuthenticationProvider.java:102)
    at de.econfood.pi.app.CmdLineAuthenticationProvider.authorize(CmdLineAuthenticationProvider.java:64)
    at de.econfood.pi.app.RaspiApp.getSensorEndpoint(RaspiApp.java:171)
    at de.econfood.pi.app.RaspiApp.sendSensorData(RaspiApp.java:144)
    at de.econfood.pi.app.RaspiApp.onGetRecsets(RaspiApp.java:126)
    at de.econfood.pi.app.BrmReadThread.readBuffer(BrmReadThread.java:112)
    at de.econfood.pi.app.BrmReadThread.run(BrmReadThread.java:20)
    at java.lang.Thread.run(Thread.java:745)

1 个答案:

答案 0 :(得分:0)

以&#34; /&#34开头的路径;通常被视为绝对路径。你需要的是一个相对路径,所以省略前导&#34; /&#34;。