From 6995ef04a071247c67d787912d432700c975910d Mon Sep 17 00:00:00 2001 From: Danil-Didkovskiy Date: Fri, 9 Jan 2026 16:50:18 +0200 Subject: [PATCH 1/8] Update Docker tutorial --- tutorials/docker/Dockerfile | 19 ++++++++++--------- tutorials/docker/project/build.gradle.kts | 10 ++++++++-- .../docker/project/src/main/java/DemoApp.java | 13 +++++++------ tutorials/docker/startup.sh | 10 ++++++++-- 4 files changed, 33 insertions(+), 19 deletions(-) diff --git a/tutorials/docker/Dockerfile b/tutorials/docker/Dockerfile index ffc110f9..55b520f2 100644 --- a/tutorials/docker/Dockerfile +++ b/tutorials/docker/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 +FROM ubuntu:24.04 ENV DEBIAN_FRONTEND=noninteractive ENV TZ=UTC @@ -6,29 +6,31 @@ ENV TZ=UTC RUN apt update # Install JDK. -RUN apt install -y openjdk-8-jdk +RUN apt install -y openjdk-17-jdk # Install Chromium's runtime dependencies. RUN apt install -y \ - libasound2 \ + ca-certificates \ + fonts-liberation \ + libasound2t64 \ libatk-bridge2.0-0 \ libatk1.0-0 \ libatspi2.0-0 \ libc6 \ - libcairo2 \ + libcairo2 \ libcups2 \ + libcurl4 \ libdbus-1-3 \ libdrm2 \ libexpat1 \ - libfontconfig1 \ libgbm1 \ - libgcc-s1 \ libglib2.0-0 \ libgtk-3-0 \ libnspr4 \ libnss3 \ libpango-1.0-0 \ - libpulse0 \ + libu2f-udev \ + libvulkan1 \ libx11-6 \ libxcb1 \ libxcomposite1 \ @@ -37,8 +39,7 @@ RUN apt install -y \ libxfixes3 \ libxkbcommon0 \ libxrandr2 \ - libxshmfence1 \ - libxtst6 \ + wget \ xdg-utils # Install a virtual X11 server that is required for Chromium to work. diff --git a/tutorials/docker/project/build.gradle.kts b/tutorials/docker/project/build.gradle.kts index 0afb7e9a..a928da58 100644 --- a/tutorials/docker/project/build.gradle.kts +++ b/tutorials/docker/project/build.gradle.kts @@ -22,7 +22,7 @@ plugins { java application // Provides convenience methods for adding JxBrowser dependencies into a project. - id("com.teamdev.jxbrowser") version "1.1.0" + id("com.teamdev.jxbrowser") version "2.0.0" } application { @@ -33,8 +33,14 @@ repositories { mavenCentral() } +java { + toolchain { + languageVersion.set(JavaLanguageVersion.of(17)) + } +} + jxbrowser { - version = "7.41.0" + version = "8.15.0" } dependencies { diff --git a/tutorials/docker/project/src/main/java/DemoApp.java b/tutorials/docker/project/src/main/java/DemoApp.java index 9cfeafca..fd93d206 100644 --- a/tutorials/docker/project/src/main/java/DemoApp.java +++ b/tutorials/docker/project/src/main/java/DemoApp.java @@ -42,18 +42,19 @@ public final class DemoApp { public static void main(String[] args) { // Set your JxBrowser license key. - System.setProperty("jxbrowser.license.key", "ENTER YOUR LICENSE KEY HERE"); + System.setProperty("jxbrowser.license.key", "YOUR_LICENSE_KEY"); - EngineOptions.Builder options = EngineOptions.newBuilder(HARDWARE_ACCELERATED); + var options = EngineOptions.newBuilder(HARDWARE_ACCELERATED); // #docfragment "enable-remote-debugging-port" // Enable the remote debugging port. + options.addSwitch("--remote-allow-origins=http://localhost:9222"); options.remoteDebuggingPort(9222); // #enddocfragment "enable-remote-debugging-port" // Creating Chromium engine. - Engine engine = Engine.newInstance(options.build()); - Browser browser = engine.newBrowser(); + var engine = Engine.newInstance(options.build()); + var browser = engine.newBrowser(); // Print the web page's title once the page is loaded. browser.navigation().on(LoadFinished.class, event -> { @@ -61,8 +62,8 @@ public static void main(String[] args) { }); SwingUtilities.invokeLater(() -> { - final BrowserView view = BrowserView.newInstance(browser); - JFrame frame = new JFrame("Demo App"); + var view = BrowserView.newInstance(browser); + var frame = new JFrame("Demo App"); frame.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { diff --git a/tutorials/docker/startup.sh b/tutorials/docker/startup.sh index b80a1004..a5e0ab4f 100644 --- a/tutorials/docker/startup.sh +++ b/tutorials/docker/startup.sh @@ -20,10 +20,16 @@ # # Launch a virtual X11 server for Chromium. -Xvfb :0 -screen 0 800x600x24+32 & +# +# If you pass `DISPLAY` (and mount the host X11 socket), the application will +# use the host X server. Otherwise, it will run on a virtual X server. +if [ -z "${DISPLAY:-}" ]; then + Xvfb :0 -screen 0 800x600x24+32 & + export DISPLAY=:0 +fi # Switch to the project directory. cd project # Start the Java application. -DISPLAY=:0 ./gradlew run +./gradlew run From 59e5b94e33a07b0bc25e81a39c008d3df1b98cec Mon Sep 17 00:00:00 2001 From: Danil-Didkovskiy Date: Mon, 12 Jan 2026 18:31:23 +0200 Subject: [PATCH 2/8] Update startup.sh --- tutorials/docker/startup.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tutorials/docker/startup.sh b/tutorials/docker/startup.sh index a5e0ab4f..c18608a0 100644 --- a/tutorials/docker/startup.sh +++ b/tutorials/docker/startup.sh @@ -21,10 +21,10 @@ # Launch a virtual X11 server for Chromium. # -# If you pass `DISPLAY` (and mount the host X11 socket), the application will -# use the host X server. Otherwise, it will run on a virtual X server. +# If DISPLAY is not set, start a virtual X server (headless mode). +# If DISPLAY is set, connect to the host X server (desktop mode). if [ -z "${DISPLAY:-}" ]; then - Xvfb :0 -screen 0 800x600x24+32 & + Xvfb :0 -screen 0 1920x1080x24+32 & export DISPLAY=:0 fi From 48284915a77b2e540c500c7507eb399850eb8694 Mon Sep 17 00:00:00 2001 From: Danil-Didkovskiy Date: Tue, 13 Jan 2026 15:36:02 +0200 Subject: [PATCH 3/8] Update dependencies and Dockerfile configuration --- tutorials/docker/Dockerfile | 1 + tutorials/docker/project/build.gradle.kts | 2 +- tutorials/docker/project/src/main/java/DemoApp.java | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/tutorials/docker/Dockerfile b/tutorials/docker/Dockerfile index 55b520f2..6fe82d96 100644 --- a/tutorials/docker/Dockerfile +++ b/tutorials/docker/Dockerfile @@ -57,5 +57,6 @@ COPY project/ project # Build the Java project. RUN cd project && ./gradlew build +# Set the working directory and the entrypoint. WORKDIR / ENTRYPOINT ["sh", "-c", "/startup.sh"] diff --git a/tutorials/docker/project/build.gradle.kts b/tutorials/docker/project/build.gradle.kts index a928da58..7fee552a 100644 --- a/tutorials/docker/project/build.gradle.kts +++ b/tutorials/docker/project/build.gradle.kts @@ -45,5 +45,5 @@ jxbrowser { dependencies { implementation(jxbrowser.swing) - implementation(jxbrowser.linux64) + implementation(jxbrowser.currentPlatform) } diff --git a/tutorials/docker/project/src/main/java/DemoApp.java b/tutorials/docker/project/src/main/java/DemoApp.java index fd93d206..8d366f16 100644 --- a/tutorials/docker/project/src/main/java/DemoApp.java +++ b/tutorials/docker/project/src/main/java/DemoApp.java @@ -45,6 +45,7 @@ public static void main(String[] args) { System.setProperty("jxbrowser.license.key", "YOUR_LICENSE_KEY"); var options = EngineOptions.newBuilder(HARDWARE_ACCELERATED); + options.disableSandbox(); // #docfragment "enable-remote-debugging-port" // Enable the remote debugging port. From db9b64bbe8cbca927e98fdbda86fb4d9e565f511 Mon Sep 17 00:00:00 2001 From: Danil-Didkovskiy Date: Tue, 20 Jan 2026 13:00:03 +0200 Subject: [PATCH 4/8] Update remote debugging snippet --- tutorials/docker/project/src/main/java/DemoApp.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/tutorials/docker/project/src/main/java/DemoApp.java b/tutorials/docker/project/src/main/java/DemoApp.java index 8d366f16..1c6d9a10 100644 --- a/tutorials/docker/project/src/main/java/DemoApp.java +++ b/tutorials/docker/project/src/main/java/DemoApp.java @@ -44,17 +44,15 @@ public static void main(String[] args) { // Set your JxBrowser license key. System.setProperty("jxbrowser.license.key", "YOUR_LICENSE_KEY"); - var options = EngineOptions.newBuilder(HARDWARE_ACCELERATED); - options.disableSandbox(); - // #docfragment "enable-remote-debugging-port" + var options = EngineOptions.newBuilder(HARDWARE_ACCELERATED); // Enable the remote debugging port. options.addSwitch("--remote-allow-origins=http://localhost:9222"); options.remoteDebuggingPort(9222); - // #enddocfragment "enable-remote-debugging-port" - // Creating Chromium engine. var engine = Engine.newInstance(options.build()); + // #enddocfragment "enable-remote-debugging-port" + var browser = engine.newBrowser(); // Print the web page's title once the page is loaded. From b1bdb98966e64b948641b6e1a7e4f0005de566f2 Mon Sep 17 00:00:00 2001 From: Danil-Didkovskiy Date: Tue, 20 Jan 2026 13:25:04 +0200 Subject: [PATCH 5/8] Update snippet and JxBrowser version --- tutorials/docker/project/build.gradle.kts | 2 +- tutorials/docker/project/src/main/java/DemoApp.java | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/tutorials/docker/project/build.gradle.kts b/tutorials/docker/project/build.gradle.kts index 7fee552a..10d75c51 100644 --- a/tutorials/docker/project/build.gradle.kts +++ b/tutorials/docker/project/build.gradle.kts @@ -40,7 +40,7 @@ java { } jxbrowser { - version = "8.15.0" + version = "8.16.1" } dependencies { diff --git a/tutorials/docker/project/src/main/java/DemoApp.java b/tutorials/docker/project/src/main/java/DemoApp.java index 1c6d9a10..79e1465c 100644 --- a/tutorials/docker/project/src/main/java/DemoApp.java +++ b/tutorials/docker/project/src/main/java/DemoApp.java @@ -46,13 +46,15 @@ public static void main(String[] args) { // #docfragment "enable-remote-debugging-port" var options = EngineOptions.newBuilder(HARDWARE_ACCELERATED); - // Enable the remote debugging port. options.addSwitch("--remote-allow-origins=http://localhost:9222"); options.remoteDebuggingPort(9222); - // Creating Chromium engine. - var engine = Engine.newInstance(options.build()); // #enddocfragment "enable-remote-debugging-port" + // Disable Chromium sandbox for Docker. + options.disableSandbox(); + + // Creating Chromium engine. + var engine = Engine.newInstance(options.build()); var browser = engine.newBrowser(); // Print the web page's title once the page is loaded. From 9100cba8f594aad285f316d4760db17613dfdcec Mon Sep 17 00:00:00 2001 From: Danil-Didkovskiy Date: Tue, 20 Jan 2026 14:50:11 +0200 Subject: [PATCH 6/8] Update Dockerfile --- tutorials/docker/Dockerfile | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/tutorials/docker/Dockerfile b/tutorials/docker/Dockerfile index 6fe82d96..cb4384b8 100644 --- a/tutorials/docker/Dockerfile +++ b/tutorials/docker/Dockerfile @@ -1,7 +1,6 @@ FROM ubuntu:24.04 ENV DEBIAN_FRONTEND=noninteractive -ENV TZ=UTC RUN apt update @@ -19,7 +18,6 @@ RUN apt install -y \ libc6 \ libcairo2 \ libcups2 \ - libcurl4 \ libdbus-1-3 \ libdrm2 \ libexpat1 \ @@ -38,9 +36,7 @@ RUN apt install -y \ libxext6 \ libxfixes3 \ libxkbcommon0 \ - libxrandr2 \ - wget \ - xdg-utils + libxrandr2 # Install a virtual X11 server that is required for Chromium to work. RUN apt install -y xvfb From 2e0c7d3f9fa8958703460ddf9e58e7b0fe483bea Mon Sep 17 00:00:00 2001 From: Danil-Didkovskiy Date: Wed, 21 Jan 2026 12:29:35 +0200 Subject: [PATCH 7/8] Remove docfragments --- tutorials/docker/project/src/main/java/DemoApp.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tutorials/docker/project/src/main/java/DemoApp.java b/tutorials/docker/project/src/main/java/DemoApp.java index 79e1465c..17a55389 100644 --- a/tutorials/docker/project/src/main/java/DemoApp.java +++ b/tutorials/docker/project/src/main/java/DemoApp.java @@ -44,11 +44,11 @@ public static void main(String[] args) { // Set your JxBrowser license key. System.setProperty("jxbrowser.license.key", "YOUR_LICENSE_KEY"); - // #docfragment "enable-remote-debugging-port" var options = EngineOptions.newBuilder(HARDWARE_ACCELERATED); + + // Configure remote debugging port. options.addSwitch("--remote-allow-origins=http://localhost:9222"); options.remoteDebuggingPort(9222); - // #enddocfragment "enable-remote-debugging-port" // Disable Chromium sandbox for Docker. options.disableSandbox(); From 7ea893b3fc42ccb9ab173f7ff14aa11384b492ba Mon Sep 17 00:00:00 2001 From: Danil-Didkovskiy Date: Wed, 21 Jan 2026 12:32:52 +0200 Subject: [PATCH 8/8] Update comment --- tutorials/docker/project/src/main/java/DemoApp.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tutorials/docker/project/src/main/java/DemoApp.java b/tutorials/docker/project/src/main/java/DemoApp.java index 17a55389..58d25e4e 100644 --- a/tutorials/docker/project/src/main/java/DemoApp.java +++ b/tutorials/docker/project/src/main/java/DemoApp.java @@ -46,7 +46,7 @@ public static void main(String[] args) { var options = EngineOptions.newBuilder(HARDWARE_ACCELERATED); - // Configure remote debugging port. + // Enable the remote debugging port. options.addSwitch("--remote-allow-origins=http://localhost:9222"); options.remoteDebuggingPort(9222);