错误还是功能??对于那些可能知道的人来说,如果您有一个窗口的 <极其用户以这种方式退出 JMP 很常见,因此几乎总是绕过所有 <
有没有人看到过这个/知道任何解决方法?
我遇到的主要问题是,我让 JMP 启动事件循环 Python 脚本并将可执行文件附加到窗口,然后通过本地主机套接字与 Python 进行通信。窗口关闭脚本将优雅地终止 Python 会话等。当 JMP 以上述方式关闭时,这种情况不会发生,然后 JMP 会冻结,但 JMP 窗口全部消失 - 因此 JMP 及其全套资源(通常超过 1GB)仍保留在任务管理器列表中,并将只能通过手动结束任务来杀死。
由于 RunProgram 结果必须绑定到活动 JMP 窗口(我想是为了事件循环目的),并且由于窗口以我上面描述的方式强制关闭,因此在我能够正确关闭之前 RunProgram 变量就被销毁了Python。
这是一团糟,我希望有一个解决方案,但到目前为止我还没有看到它。
自动化和脚本编写视窗回复:错误还是功能?我在 FileSnapper 插件中使用它来处理类似的问题。 RunProgram 实际上并不绑定到窗口,而是绑定到可以克隆的窗口上下文。 只要克隆或窗口引用上下文,它就不会被破坏,并且 RunProgram 脚本仍然可以工作。 命名空间:evalcontext 变量从未被使用过,除非是为了保持上下文活动。 RunProgram 变量/句柄(可能是 rp)也保存在同一名称空间中,因为它需要相同的生命周期。
// addinLoad.jsl - this is the round-about launcher that uses a clone of a transient
// window's evalcontextbox to keep the evalcontext for a callback script alive.
// ideally, this would be, or directly include, FileSnapper.jsl, but that file
// constructs a RunProgram callback script that is somehow tied to a transient
// evalcontext that won't be available at callback time.
Local( {bb},
New Window( "File Snapper Startup", bb = Button Box( "start", Include( "$ADDIN_HOME(com.jmp.hales.FileSnapper)\Additional.jsl" ) ) );
bb << click; // run the script in this window's context
// capture the evalcontext, by cloning the box that references it into our namespace
Namespace( "FileSnapper" ):evalcontext = ((bb << parent) << parent) << clonebox;
bb << closewindow;
if(Namespace( "FileSnapper" ):evalcontext<<CLASSNAME></CLASSNAME>
这些都没有记录在案,也没有承诺在未来发挥作用,但如果发生变化,它可能会发出有用的信息。
@jschroedl - ^Q 和 OnClose 脚本
回复:错误还是功能?这次真是万分感谢!我现在就看一下它是否有效,但你永远不会放弃这些美妙的宝石,所以我相信它会对我有用!这对于绕过窗口问题来说非常棒!
回复:错误还是功能?@肯尼思亚当斯不客气! 文件快照程序(文件快照程序),或者获取上下文的技术? 这两种反馈对于 JMP 开发团队都有好处。
@朱利安- Filesnapper 可能有助于恢复我正在处理的 JSL,并且上下文捕获器在编写在启动期间(也可能在其他地方)启动的加载项时非常有用。如果更多地集成到 JMP 中,这两个想法可能会更好。
回复:错误还是功能?感谢您的提醒@Craige_Hales
我已经提交了一个问题来调查 ^Q + OnClose 行为,看看我们将来是否可以改进。
回复:错误还是功能?请注意,我仅在 ^Q 导致以下弹出窗口(多个未保存的文件)并且用户单击“不保存”时才看到该问题

回复:错误还是功能?我刚刚使用您的技巧实现了持久的 Python 连接以摆脱窗口 - 现在我可以将 Python 会话终止脚本放入 AddinUnload.jsl 文件中并且它可以工作(JMP 不会在没有打开窗口的情况下冻结,留下一个只能通过任务管理器杀死的隐藏会话)
非常感谢你的帮助!借助新的持久 Python 连接,我可以将所有数据查询卸载到 Python 并并行运行它们,然后 JMP 将在准备好供用户使用时拾取文件,这太棒了!
回复:错误还是功能?谢谢,你拯救了我的一天。如果您在用户使用“不保存”选项关闭多个编辑的文件时遇到问题。如果有人在论文写作方面需要帮助并且正在寻找最好的在线论文作者,他们应该访问这https://writinguniverse.com/essay-types/informative-essays/页。 该网站允许他们比较不同的网站及其评论,以便为他们的论文项目做出明智的选择。 简而言之,该网站通过为他们的论文项目提供评论和选项来帮助人们找到合适的在线论文写作服务。
回复:错误还是功能?@jschroedl有更新吗?当用户从窗口列表中选择多个窗口并立即关闭它们(通常在选择它们后按删除键)时,我还注意到同样的问题,并且如果有一个关于多个未保存文件的弹出窗口,则“保存无”将关闭而不会触发 OnClose——与上面完全相同,只是它们不退出 JMP。
由于清理脚本永远不会运行,这可能会使许多资源悬而未决。