在 SWT 中使用 Fuzio

本页面介绍如何配置 Gradle 项目,以便在 SWT GUI 工具包中使用 Fuzio。

前提条件 

获取项目 

本指南中描述的示例项目可在 Gitee 独立仓库中找到。

配置 Gradle 项目 

仓库 

Fuzio 通过 Jiku 托管的 Maven 仓库进行分发。请将以下仓库引用添加到你的 build.gradle.kts 中:

repositories {
   // 包含 Fuzio 二进制文件的仓库。
   maven("https://jiku.mycloudrepo.io/public/repositories/releases")
}

版本变量 

我们建议为项目中使用的 Fuzio 版本定义一个变量。以下各节将引用该变量。

val fuzioVersion = "2026.1.0"

平台 

若要添加可在 Windows、macOS 和 Linux 上运行的 Fuzio 库,请添加以下代码:

dependencies {
   implementation("tech.fuzio:fuzio-cross-platform:${fuzioVersion}")
}

SWT 

若要在应用的 SWT GUI 中使用 Fuzio,请同时添加相应的 Fuzio 依赖:

dependencies {
   implementation("tech.fuzio:fuzio-swt:${fuzioVersion}")
}

SWT 需要显式指定平台相关依赖,因此你需要为构建和运行应用的每个平台分别导入对应的实现依赖:

val swtImplDependency = "${swtImplPrefix}.${swtOs()}.${swtArch()}:${swtVersion}"
dependencies {
    implementation(swtImplDependency)
}

另外,在 Gradle 中使用 SWT 并不完全直接 —— 你需要使用依赖项替换。请参阅本快速开始中总结部分提供的完整 buld.gradle.kts 文件。

Kotlin DSL 

如果你使用 Kotlin 进行开发,我们建议添加 Fuzio Kotlin DSL 以获得最佳体验。

dependencies {
   implementation("tech.fuzio:fuzio-kotlin:${fuzioVersion}")
}

总结 

以下是 build.gradle.kts 的配置示例:

Kotlin

plugins {
    java
    application
    kotlin("jvm") version "2.0.0"
}

val fuzioVersion = "2026.1.0"
val swtVersion = "3.124.0"

repositories {
    mavenCentral()
    maven("https://repo1.maven.org/maven2")
    maven("https://jiku.mycloudrepo.io/public/repositories/releases")
}

val swtOs = {
    val os = System.getProperty("os.name").lowercase()
    when {
        os.contains("win") -> "win32.win32"
        os.contains("linux") -> "gtk.linux"
        os.contains("mac") -> "cocoa.macosx"
        else -> {
            throw IllegalStateException("Unexpected operating system")
        }
    }
}

val swtArch = {
    val arch = System.getProperty("os.arch")
    val isArm = "aarch64" == arch || "arm" == arch
    when {
        isArm -> "aarch64"
        else -> "x86_64"
    }
}

val swtImplPrefix = "org.eclipse.platform:org.eclipse.swt"
val swtImplDependency = "${swtImplPrefix}.${swtOs()}.${swtArch()}:${swtVersion}"

dependencies {
    implementation("tech.fuzio:fuzio-cross-platform:${fuzioVersion}")
    implementation("tech.fuzio:fuzio-swt:${fuzioVersion}")
    implementation(kotlin("stdlib-jdk8"))
    implementation("tech.fuzio:fuzio-kotlin:${fuzioVersion}")
    implementation(swtImplDependency)
}

val osgiUnresolved = "\${osgi.platform}"
project.configurations.all {
    resolutionStrategy {
        dependencySubstitution {
            substitute(module("${swtImplPrefix}.${osgiUnresolved}"))
                .because("The Maven property osgi.platform is not handled by Gradle")
                .using(module(swtImplDependency))
        }
    }
}

kotlin {
    jvmToolchain(17)
}

application {
    // 定义应用程序的主类。
    mainClass.set("SwtApp")

    // 或者,你也可以运行 Kotlin 示例,如下:
    //mainClass.set("KotlinSwtApp")
}

tasks.withType<JavaExec> {
    if (os.contains("mac")) {
        jvmArgs(
             // macOS 下在 Cocoa 上运行 SWT 所需。
            "-XstartOnFirstThread"
        )
    }
        
    // 将命令行中的所有 Java 系统属性分配给 JavaExec 任务。
    systemProperties(System.getProperties().mapKeys { it.key as String })
}

将 Fuzio 嵌入 SWT 

项目中提供了两个 SWT 应用实现:Java 和 Kotlin。

两种实现方式相似,演示了如何:

  1. 初始化 Engine(Chromium)实例。
  2. 创建 Browser 实例。
  3. 加载所需网页。
  4. BrowserView 组件嵌入 SWT shell 中,以显示已加载的网页。
Java
Kotlin
// SwtApp.java

import static tech.fuzio.engine.RenderingMode.HARDWARE_ACCELERATED;

import tech.fuzio.engine.Engine;
import tech.fuzio.view.swt.BrowserView;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public final class SwtApp {

    public static void main(String[] args) {
        // 初始化 Chromium。
        var engine = Engine.newInstance(HARDWARE_ACCELERATED);

        // 创建 Browser 实例。
        var browser = engine.newBrowser();

        // 加载所需网页。
        browser.navigation().loadUrl("https://html5test.jiku.co");

        var display = new Display();
        var shell = new Shell(display);
        shell.setText("Fuzio SWT");
        shell.setLayout(new FillLayout());

        // 创建并嵌入 SWT BrowserView 组件以显示 Web 内容。
        var view = BrowserView.newInstance(shell, browser);
        view.setSize(1280, 800);

        shell.pack();
        shell.open();

        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) {
                display.sleep();
            }
        }
        // 关闭 Chromium 并释放已分配的资源。
        engine.close();

        display.dispose();
    }
}
// KotlinSwtApp.kt:

import tech.fuzio.dsl.Engine
import tech.fuzio.engine.RenderingMode.HARDWARE_ACCELERATED
import tech.fuzio.view.swt.BrowserView
import org.eclipse.swt.layout.FillLayout
import org.eclipse.swt.widgets.Display
import org.eclipse.swt.widgets.Shell

fun main() {
    // 初始化 Chromium。
    val engine = Engine(HARDWARE_ACCELERATED)

    // 创建 Browser 实例。
    val browser = engine.newBrowser()

    // 加载所需网页。
    browser.navigation().loadUrl("https://html5test.jiku.co")

    val display = Display()
    val shell = Shell(display)
    shell.text = "Fuzio SWT"
    shell.layout = FillLayout()

    // 创建并嵌入 SWT BrowserView 组件以显示 Web 内容。
    val view = BrowserView.newInstance(shell, browser)
    view.setSize(1280, 800)

    shell.pack()
    shell.open()

    while (!shell.isDisposed) {
        if (!display.readAndDispatch()) {
            display.sleep()
        }
    }
    // 关闭 Chromium 并释放已分配的资源。
    engine.close()

    display.dispose()
}

运行 SWT 应用 

使用以下命令构建并运行 SWT 应用:

./gradlew run -Dfuzio.license.key=<your_license_key>

启动后,你将看到一个包含 BrowserView 组件的 SWT 应用程序,该组件会显示 https://html5test.jiku.co

SWT 应用程序中的 BrowserView 控件

下一步 

微信咨询

即库客服

微信公众号二维码

技术客服

微信公众号二维码