Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java内核无法连接到jupyter笔记本_Java_Jupyter Notebook - Fatal编程技术网

Java内核无法连接到jupyter笔记本

Java内核无法连接到jupyter笔记本,java,jupyter-notebook,Java,Jupyter Notebook,我正在使用SpencerPark IJava在jupyter笔记本中使用java 成功安装后,我打开了一个新的java笔记本,但它没有与jupyter笔记本连接 我试着在anaconda提示符下运行SpencerPark IJava官方文档中给出的命令 jupyter console --kernel=java 它抛出了这个异常: Exception in thread "main" java.lang.UnsupportedClassVersionError: io/gi

我正在使用SpencerPark IJava在jupyter笔记本中使用java

成功安装后,我打开了一个新的java笔记本,但它没有与jupyter笔记本连接

我试着在anaconda提示符下运行SpencerPark IJava官方文档中给出的命令

jupyter console --kernel=java
它抛出了这个异常:

Exception in thread "main" java.lang.UnsupportedClassVersionError: io/github/spencerpark/ijava/IJava : Unsupported major.minor version 53.0
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$100(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
运行服务器的jupyter笔记本中也显示了相同的错误


有人知道如何解决这个问题吗?

IJava是为java 9编译的(因为这是引入JShell的版本)。这意味着内核需要在9版或更高版本的JVM上运行。这就是
不受支持的53.0版主次版本所建议的

通常,遇到此问题的用户安装了正确的版本,但他们使用的是旧的JVM,而不是新安装的JVM。有两个选项可以解决此问题:

  • 通过更改
    kernel.json
    ,准确地告诉Jupyter启动内核的java版本:

    • 执行
      jupyter kernelspec list
      查找内核的安装目录

      Available kernels:
        java           C:\Users\Spencer\AppData\Roaming\jupyter\kernels\java
        ...
      
    • 在该目录中找到
      kernel.json
      并更改
      argv
      。json是一个配置文件,它还告诉jupyter如何启动内核。
      argv
      只是一个要执行的命令注意:使用
      /
      或在使用
      \
      时,必须通过编写
      \
      在JSON中转义它们

      {
      “argv”:[
      //“爪哇”,
      “C:/absolute/path/to/jdk-9/bin/java”
      “-jar”,
      “C:/Users/Spencer/AppData/Roaming/jupyter/kernels/java/ijava-1.3.0.jar”,
      “{connection_file}”
      ],
      ...
      }
      
      这里我还要提到,
      env
      是一个环境变量字典,Jupyter将在调用
      argv
      之前设置它。您可以使用它来设置
      JAVA\u HOME
      或运行内核时始终需要设置的其他变量。在Mac上,这似乎是用户更熟悉的

      {
      ...
      “环境”:{
      “JAVA_HOME”:“/Library/JAVA/JavaVirtualMachines/jdk-9.jdk/Contents/HOME”
      }
      }
      
    • 或者,您可能还需要更改
      显示\u名称
      ,以包含该版本。如果您设置了几个版本,这很方便,因此当您使用下拉菜单选择新内核时,它会显示
      java9
      (例如)

  • 在启动笔记本之前,将java 9临时添加到路径中

    • 就像上面提到的那样,内核只是执行
      java
      命令来启动内核。这意味着我们可以将最新的java版本放在路径的前面
    • set PATH=C:\absolute\PATH\to\jdk-9\bin\;%路径%
      将执行此操作。
      • 作为旁注,我有一些变量
        JAVA7_HOME
        JAVA8_HOME
        JAVA9_HOME
        来简化这个切换。然后我使用
        set PATH=%JAVA9\u HOME%\bin\;%路径%
        以使用特定版本
    • 然后,当使用
      where java
      时,它可能会给出多个路径,但列表顶部的路径应该是java 9
    • 最后,用这条新路径启动笔记本,您应该可以开始了。把所有的东西放在一起
      set PATH=%JAVA9_HOME%\bin\;%PATH% && jupyter notebook
      
      export PATH=$JAVA9_HOME/bin/:$PATH&&jupyter笔记本
      

  • 不,我的内核不是从这里开始的,我的java代码在其他IDLE中正常运行。因此,这个解决方案没有帮助。您似乎误解了错误。代码是用比试图运行它的JRE更新的JDK版本编译的,因此出现了
    UnsupportedClassVersionError