You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建无法关闭的Jython JFrame?适配TopSpin脚本防误操作

为TopSpin创建不可关闭的Jython弹窗防止数据集切换

完全理解你的痛点——运行耗时的TopSpin NMR数据采集/处理脚本时,要是不知情的工作人员切换了数据集,很容易搞砸整个流程,普通弹窗又太容易被随手关掉。下面是专门针对这个需求的实现方案:

核心实现思路

  • 自定义JFrame弹窗,重写窗口关闭逻辑,彻底禁用关闭按钮
  • 让弹窗始终置顶显示,确保它不会被TopSpin主窗口遮挡
  • 添加清晰醒目的提示文本,明确告知当前不能进行数据集切换操作

完整代码示例

from java.awt import Label, BorderLayout, Font
from javax.swing import JFrame

class UnclosableScriptRunningFrame(JFrame):
    def __init__(self):
        super(UnclosableScriptRunningFrame, self).__init__("TopSpin脚本运行中")
        # 关键设置:禁用窗口关闭功能
        self.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE)
        # 弹窗始终置顶,保持在TopSpin界面最上层
        self.setAlwaysOnTop(True)
        # 禁止调整窗口大小,避免提示文本被遮挡
        self.setResizable(False)
        
        # 添加醒目的提示标签
        alert_label = Label("⚠️ 重要提示:脚本正在运行,请勿切换数据集!", Label.CENTER)
        alert_label.setFont(Font("Arial", Font.BOLD, 14))
        self.getContentPane().add(alert_label, BorderLayout.CENTER)
        
        # 设置窗口大小并居中显示
        self.setSize(450, 160)
        self.setLocationRelativeTo(None)

# 脚本启动时显示弹窗
running_alert = UnclosableScriptRunningFrame()
running_alert.setVisible(True)

# ----------------------
# 这里放入你的耗时NMR数据处理/采集代码
# 例如:
# run_nmr_acquisition()
# process_nmr_data()
# ----------------------

# 脚本执行完成后,手动关闭弹窗
running_alert.dispose()

关键代码说明

  1. setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE):这是实现不可关闭的核心,点击窗口右上角的关闭按钮时不会有任何响应,彻底阻止用户关闭弹窗
  2. setAlwaysOnTop(True):确保弹窗始终显示在TopSpin主窗口上方,不会被遮挡,时刻提醒所有人当前脚本在运行
  3. 固定窗口大小+居中显示:让弹窗位置醒目,不会被随意移动或调整,保证提示信息始终清晰可见

额外注意事项

  • 务必在脚本执行完毕后调用dispose()关闭弹窗,否则弹窗会一直停留在界面上
  • 如果需要,可以扩展弹窗添加进度条或实时状态文本,让用户了解脚本运行进度
  • TopSpin原生支持Jython与Java Swing组件的交互,这段代码可以直接在TopSpin的脚本编辑器中运行测试

内容的提问来源于stack exchange,提问作者Sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 06:53:55