String.getProperty(“ java.version”)返回null

问题描述 投票:1回答:1

我正在尝试编译一个使用Processing源代码的类。尝试编译扩展了StringIndexOutOfBoundsException的类时出现PApplet

PApplet类具有以下我认为是问题的代码

public class PApplet implements PConstants {
  /** Full name of the Java version (i.e. 1.5.0_11). */
  static public final String javaVersionName =
    System.getProperty("java.version");

  static public final int javaPlatform;
  static {
    String version = javaVersionName;
    if (javaVersionName.startsWith("1.")) {
      version = version.substring(2);
      javaPlatform = parseInt(version.substring(0, version.indexOf('.')));
    } else {
      // Remove -xxx and .yyy from java.version (@see JEP-223)
      javaPlatform = parseInt(version.replaceAll("-.*","").replaceAll("\\..*",""));
    }
  }

我认为字符串javaVersionName被设置为null或其他一些奇怪的值,导致version.indexOf('.')返回-1

堆栈跟踪:

    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:567)
    at org.codehaus.mojo.exec.ExecJavaMojo$1.run (ExecJavaMojo.java:293)
    at java.lang.Thread.run (Thread.java:830)
Caused by: java.lang.StringIndexOutOfBoundsException: begin 0, end -1, length 2
    at java.lang.String.checkBoundsBeginEnd (String.java:3720)
    at java.lang.String.substring (String.java:1909)
    at processing.core.PApplet.<clinit> (PApplet.java:123)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:567)
    at org.codehaus.mojo.exec.ExecJavaMojo$1.run (ExecJavaMojo.java:293)
    at java.lang.Thread.run (Thread.java:830)

[在某处说at processing.core.PApplet.<clinit> (PApplet.java:123)PApplet.java中的第123行是我上面发布的第一行(public class PApplet ...)。

我怀疑它可能与我的路径和JAVA_HOME系统变量有关。我正在使用JDK 13,它已作为C:\Program Files\Java\jdk-13\bin添加到我的路径中,并且JAVA_HOME变量设置为C:\Program Files\Java\jdk-13\

java processing
1个回答
0
投票

这有两个方面:

  • 在上下文中引发StringIndexOutOfBoundsException的事实意味着javaVersionName字符串为not null,否则,当调用NullPointerException时会得到startsWith
  • 这里的问题是假设1.之后的字符串部分将有另一个点

有各种Java主要版本和供应商,并且版本会随版本而变化。

您应该简单地调试代码,并推断那里返回的值是什么。

作为一个可能不相关的说明,如果您的应用程序是一个applet,则也要保持谨慎(如类名所示)。>

安全考虑:可以限制对系统属性的访问由安全经理。在applet中,这通常是一个问题,被阻止读取某些系统属性和写入任何系统属性。有关在中访问系统属性的更多信息小程序,请参阅《使用Java进行更多操作》中的“系统属性”。互联网应用课程。

来源here

© www.soinside.com 2019 - 2024. All rights reserved.