Skip to content

Instantly share code, notes, and snippets.

@tueda
Last active February 21, 2024 04:56
Show Gist options
  • Star 5 You must be signed in to star a gist
  • Fork 4 You must be signed in to fork a gist
  • Save tueda/a200b3f747d0fc864be8b4dd09be5a1e to your computer and use it in GitHub Desktop.
Save tueda/a200b3f747d0fc864be8b4dd09be5a1e to your computer and use it in GitHub Desktop.
Java-Colab.ipynb
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "Java-Colab.ipynb",
"provenance": [],
"collapsed_sections": [],
"include_colab_link": true
},
"kernelspec": {
"name": "java",
"display_name": "Java"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/tueda/a200b3f747d0fc864be8b4dd09be5a1e/Java-Colab.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "CBWQIvc0Ov3P",
"colab_type": "text"
},
"source": [
"# Prepare Java Kernel for Google Colab\n",
"This notebook is a template to use Java in Google Colaboratory (inspired by [Google Colab Javascript QuickStart](https://dev.to/obenjiro/silence-of-the-fans-part-1-javascript-quickstart-5f3m)). It uses [IJava](https://github.com/SpencerPark/IJava) as the Jupyter Kernel.\n",
"1. Run the cell bellow (click it and press `Shift`+`Enter`),\n",
"2. then refresh the page (press `F5`) right after that.\n",
"\n",
"Now you can write Java code. See examples in the next section."
]
},
{
"cell_type": "code",
"metadata": {
"id": "RwIAuN1IKtUo",
"colab_type": "code",
"outputId": "56e9ffa0-a780-43df-9176-a5fec6271ced",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 873
}
},
"source": [
"!apt update -q\n",
"!apt-get install -q openjdk-11-jdk-headless\n",
"!curl -L https://github.com/SpencerPark/IJava/releases/download/v1.3.0/ijava-1.3.0.zip -o ijava-kernel.zip\n",
"!unzip -q ijava-kernel.zip -d ijava-kernel && cd ijava-kernel && python3 install.py --sys-prefix\n",
"!jupyter kernelspec list"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"Get:1 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]\n",
"Ign:2 https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64 InRelease\n",
"Ign:3 https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64 InRelease\n",
"Hit:4 http://archive.ubuntu.com/ubuntu bionic InRelease\n",
"Hit:5 https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64 Release\n",
"Get:6 https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64 Release [564 B]\n",
"Get:7 https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64 Release.gpg [833 B]\n",
"Get:8 http://archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]\n",
"Get:9 http://security.ubuntu.com/ubuntu bionic-security/universe amd64 Packages [834 kB]\n",
"Get:10 https://cloud.r-project.org/bin/linux/ubuntu bionic-cran35/ InRelease [3,626 B]\n",
"Get:11 http://security.ubuntu.com/ubuntu bionic-security/main amd64 Packages [870 kB]\n",
"Get:12 http://security.ubuntu.com/ubuntu bionic-security/restricted amd64 Packages [37.0 kB]\n",
"Get:13 http://archive.ubuntu.com/ubuntu bionic-backports InRelease [74.6 kB]\n",
"Get:15 https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64 Packages [31.7 kB]\n",
"Get:16 https://cloud.r-project.org/bin/linux/ubuntu bionic-cran35/ Packages [87.7 kB]\n",
"Get:17 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 Packages [1,161 kB]\n",
"Get:18 http://archive.ubuntu.com/ubuntu bionic-updates/multiverse amd64 Packages [12.2 kB]\n",
"Get:19 http://archive.ubuntu.com/ubuntu bionic-updates/restricted amd64 Packages [50.4 kB]\n",
"Get:20 http://archive.ubuntu.com/ubuntu bionic-updates/universe amd64 Packages [1,365 kB]\n",
"Get:21 http://archive.ubuntu.com/ubuntu bionic-backports/universe amd64 Packages [4,247 B]\n",
"Hit:22 http://ppa.launchpad.net/graphics-drivers/ppa/ubuntu bionic InRelease\n",
"Get:23 http://ppa.launchpad.net/marutter/c2d4u3.5/ubuntu bionic InRelease [15.4 kB]\n",
"Get:24 http://ppa.launchpad.net/marutter/c2d4u3.5/ubuntu bionic/main Sources [1,789 kB]\n",
"Get:25 http://ppa.launchpad.net/marutter/c2d4u3.5/ubuntu bionic/main amd64 Packages [863 kB]\n",
"Fetched 7,378 kB in 7s (1,028 kB/s)\n",
"Reading package lists...\n",
"Building dependency tree...\n",
"Reading state information...\n",
"53 packages can be upgraded. Run 'apt list --upgradable' to see them.\n",
"Reading package lists...\n",
"Building dependency tree...\n",
"Reading state information...\n",
"Suggested packages:\n",
" openjdk-11-demo openjdk-11-source\n",
"The following NEW packages will be installed:\n",
" openjdk-11-jdk-headless\n",
"0 upgraded, 1 newly installed, 0 to remove and 53 not upgraded.\n",
"Need to get 193 MB of archives.\n",
"After this operation, 202 MB of additional disk space will be used.\n",
"Get:1 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 openjdk-11-jdk-headless amd64 11.0.6+10-1ubuntu1~18.04.1 [193 MB]\n",
"Fetched 193 MB in 7s (28.8 MB/s)\n",
"Selecting previously unselected package openjdk-11-jdk-headless:amd64.\n",
"(Reading database ... 133872 files and directories currently installed.)\n",
"Preparing to unpack .../openjdk-11-jdk-headless_11.0.6+10-1ubuntu1~18.04.1_amd64.deb ...\n",
"Unpacking openjdk-11-jdk-headless:amd64 (11.0.6+10-1ubuntu1~18.04.1) ...\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "USI3wh5pQEmg",
"colab_type": "text"
},
"source": [
"# Examples"
]
},
{
"cell_type": "code",
"metadata": {
"id": "lO1aYxJrQHX0",
"colab_type": "code",
"outputId": "600464ba-e872-40cb-dec4-c1588e308239",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 35
}
},
"source": [
"System.out.println(\"Hello world!\");"
],
"execution_count": 2,
"outputs": [
{
"output_type": "stream",
"text": [
"Hello world!\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "QgODg3kETMW6",
"colab_type": "code",
"outputId": "b83eb7cc-0c0b-4ed8-e602-1e0d92c05712",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 417
}
},
"source": [
"%maven org.knowm.xchart:xchart:3.5.2\n",
"import org.knowm.xchart.*;\n",
"\n",
"double[] xData = new double[] { 0.0, 1.0, 2.0 };\n",
"double[] yData = new double[] { 2.0, 1.0, 0.0 };\n",
"\n",
"XYChart chart = QuickChart.getChart(\"Sample Chart\", \"X\", \"Y\", \"y(x)\", xData, yData);\n",
"\n",
"BitmapEncoder.getBufferedImage(chart);"
],
"execution_count": 5,
"outputs": [
{
"output_type": "execute_result",
"data": {
"image/png": "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",
"text/plain": [
"BufferedImage@63e44d42: type = 1 DirectColorModel: rmask=ff0000 gmask=ff00 bmask=ff amask=0 IntegerInterleavedRaster: width = 600 height = 400 #Bands = 3 xOff = 0 yOff = 0 dataOffset[0] 0"
]
},
"metadata": {
"tags": []
},
"execution_count": 5
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "TvnvdqOPXa45",
"colab_type": "code",
"colab": {}
},
"source": [
""
],
"execution_count": 0,
"outputs": []
}
]
}
@seanbenhur
Copy link

How to read inputs!?, when I try to read inputs it doesn't show any input form!

@tueda
Copy link
Author

tueda commented Jan 5, 2021

You mean reading inputs from console? The following code works to me:

var scanner = new java.util.Scanner(System.in);
var str = scanner.nextLine();

@davisjm4
Copy link

davisjm4 commented Mar 5, 2022

I'm getting the following error.

NameError Traceback (most recent call last)
in ()
----> 1 System.out.println("Hello world!");

NameError: name 'System' is not defined

@tueda
Copy link
Author

tueda commented Mar 9, 2022

@davisjm4 I can't reproduce your error when I follow the instruction in the notebook. Your kernel looks like Python, not Java; it seems that the page was not successfully refreshed.

@davisjm4
Copy link

davisjm4 commented Mar 9, 2022 via email

@jmmanipadam
Copy link

followed theinstructions, the code i pasted is running but no output seen. Why?

@tueda
Copy link
Author

tueda commented Nov 14, 2022

@jmmanipadam You need to open the notebook file in Colab (copy&paste code doesn't work), because you need to switch the Jupyter Kernel type to "java" (impossible from the Colab UI, saved in the .ipynb file). That is why I made this template notebook.

@benrobideau
Copy link

Does this still currently work? I've been running into the issue of a never-ending "Connecting...". I've been troubleshooting for about a day with no luck.

@tueda
Copy link
Author

tueda commented Dec 13, 2022

Oh, now the Java Kernel actually seems to stop at "Connecting"...

SpencerPark/IJava#138
googlecolab/colabtools#3267

@tueda
Copy link
Author

tueda commented Dec 21, 2022

@tueda
Copy link
Author

tueda commented Feb 21, 2024

For reference, nowadays the easiest way to run Java on Colab would be:

  1. Copy and paste 4 lines in https://github.com/jupyter-java#installing-in-online-jupyter-notebooks, and run them.
  2. Change runtime type to java (IJava/j!).

Then the above examples work well (including %maven ...).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment