求一个漂亮的悬浮窗代码 可以暂停开始退出脚本

求一个漂亮的悬浮窗代码 可以暂停开始退出脚本,
我自己写的一个ui界面设置参数,设置之后保存参数 然后打开悬浮框 然后在悬浮框里面退出软件 直接报错 说线程异常终止 大佬们 谁有这样模板代码 或者谁能给指点指点


```javascript
// 导入Auto.js的UI模块
var UI = require("ui");
// 导入Auto.js的悬浮窗模块
var FloatUI = require("floatui");

// 初始化参数
var scriptParams = {
    interval: 1000,  // 默认间隔为1秒
    isRunning: false  // 默认脚本未运行
};

// 创建悬浮窗口
var floatWindow = FloatUI.create({
    width: 200,
    height: 150,
    text: "悬浮窗",
    onTouch: function () {
        // 悬浮窗口被点击时的回调
        UI.alert("悬浮窗点击", "执行相关操作");
    }
});

// 在悬浮窗口中添加按钮
floatWindow.addButton({
    text: "开始",
    onClick: function () {
        // 开始按钮点击时的回调
        startScript();
    }
});

floatWindow.addButton({
    text: "暂停",
    onClick: function () {
        // 暂停按钮点击时的回调
        pauseScript();
    }
});

floatWindow.addButton({
    text: "退出",
    onClick: function () {
        // 退出按钮点击时的回调
        exitScript();
    }
});

// 在UI界面设置参数后调用此函数保存参数
function saveParams(params) {
    scriptParams = params;
}

// 开始脚本
function startScript() {
    // 根据参数执行具体的操作
    if (!scriptParams.isRunning) {
        toast("脚本开始运行");
        // 在这里执行脚本的具体操作
        scriptParams.isRunning = true;
    } else {
        toast("脚本已经在运行中");
    }
}

// 暂停脚本
function pauseScript() {
    // 根据参数执行具体的操作
    if (scriptParams.isRunning) {
        toast("脚本已暂停");
        // 在这里执行暂停脚本的具体操作
        scriptParams.isRunning = false;
    } else {
        toast("脚本未运行");
    }
}

// 退出脚本
function exitScript() {
    // 根据参数执行具体的操作
    if (scriptParams.isRunning) {
        toast("脚本已退出");
        // 在这里执行退出脚本的具体操作
        scriptParams.isRunning = false;
        // 关闭悬浮窗口
        floatWindow.close();
        // 退出脚本
        exit();
    } else {
        toast("脚本未运行");
    }
}

// 执行UI设置参数的操作(这部分根据你的UI设置实现)
// 这里使用了假设的UI.setXXX函数,根据你的实际情况修改
UI.setInterval("输入间隔时间(ms)", "interval", 1000, function (result) {
    scriptParams.interval = result;
    toast("间隔时间设置为:" + result + "毫秒");
});

UI.setCheckbox("运行状态", "isRunning", false, function (result) {
    scriptParams.isRunning = result;
    toast("运行状态设置为:" + (result ? "运行中" : "已暂停"));
});

// 显示悬浮窗口
floatWindow.show();

可能是在子线程里操控ui了吧?

var windowWidth = 135; // 设置悬浮窗的宽度
var window = floaty.window(
    <frame>
        <button id="action" text="开始运行" w="80" h="40" bg="#50ffffff" />
        <button id="exit" text="退出" w="50" h="40" bg="#50ffffff" marginLeft="85" />
    </frame>
);

// 设置悬浮窗位置为屏幕顶部居中
window.setPosition(device.width / 2 - windowWidth, 0);

setInterval(() => {}, 1000);
var execution = null;
window.action.setOnTouchListener(function(view, event) {
    switch (event.getAction()) {
        case event.ACTION_DOWN:
            // 记录按键被按下时的触摸坐标
            x = event.getRawX();
            y = event.getRawY();
            windowX = window.getX();
            windowY = window.getY();
            downTime = new Date().getTime();
            return true;
        case event.ACTION_MOVE:
            // 移动手指时调整悬浮窗位置
            window.setPosition(windowX + (event.getRawX() - x),
                windowY + (event.getRawY() - y));
            // 如果按下的时间超过1.5秒判断为长按,退出脚本
            if (new Date().getTime() - downTime > 1500) {
                exit();
            }
            return true;
        case event.ACTION_UP:
            // 手指弹起时如果偏移很小则判断为点击
            if (Math.abs(event.getRawY() - y) < 5 && Math.abs(event.getRawX() - x) < 5) {
                onClick();
            }
            return true;
    }
    return true;
});

window.exit.setOnClickListener(function() {
    engines.stopAll();
});

function onClick() {
    if (window.action.getText() == '开始运行') {
        execution = threads.start(function() {
            // 监听按钮
            while (true) {
                //在这里输入你想要的代码
                //在这里输入你想要的代码
                //在这里输入你想要的代码
                sleep(100);
            }
        });

        window.action.setText('停止运行');
    } else {
        if (execution) {
            execution.interrupt();
        }
        window.action.setText('开始运行');
    }
}