Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

执行 python 脚本可以正常运行但是 IDEA 报错 #149

Closed
cxyxiaokui opened this issue Nov 28, 2024 · 0 comments
Closed

执行 python 脚本可以正常运行但是 IDEA 报错 #149

cxyxiaokui opened this issue Nov 28, 2024 · 0 comments

Comments

@cxyxiaokui
Copy link

cxyxiaokui commented Nov 28, 2024

报错信息:

java.lang.Exception: error when processing com.intellij.execution.process.ProcessEvent[source={processTerminatedListener=com.intellij.execution.process.ProcessTerminatedListener@657f176}] by class com.phodal.shirelang.run.ShireProcessAdapter
	at com.intellij.execution.process.ProcessHandler$2.processTerminated(ProcessHandler.java:268)
	at com.intellij.execution.process.ProcessHandler.lambda$notifyTerminated$2(ProcessHandler.java:207)
	at com.intellij.execution.process.ProcessHandler$TasksRunner.execute(ProcessHandler.java:325)
	at com.intellij.execution.process.ProcessHandler.notifyTerminated(ProcessHandler.java:190)
	at com.intellij.execution.process.ProcessHandler.notifyProcessDetached(ProcessHandler.java:182)
	at com.phodal.shirelang.run.ShireProcessHandler.detachProcessImpl(ShireProcessHandler.kt:12)
	at com.intellij.execution.process.ProcessHandler.lambda$detachProcess$1(ProcessHandler.java:143)
	at com.intellij.execution.process.ProcessHandler$TasksRunner.execute(ProcessHandler.java:325)
	at com.intellij.execution.process.ProcessHandler.detachProcess(ProcessHandler.java:140)
	at com.phodal.shirelang.run.runner.ShireRunner.executePostFunction(ShireRunner.kt:227)
	at com.phodal.shirelang.run.runner.ShireRunner.execute$lambda$1(ShireRunner.kt:82)
	at com.phodal.shirelang.run.executor.ShireDefaultLlmExecutor.execute$lambda$1$lambda$0(ShireDefaultLlmExecutor.kt:49)
	at com.phodal.shirecore.config.interaction.EditorInteractionProvider$execute$1.invokeSuspend(EditorInteractionProvider.kt:101)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:101)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
	at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:735)
	at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:732)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:400)
	at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1.run(Executors.java:732)
	at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: com.intellij.serviceContainer.AlreadyDisposedException: Container is already disposed
	at com.intellij.serviceContainer.ComponentManagerImplKt.throwAlreadyDisposedIfNotUnderIndicatorOrJob(ComponentManagerImpl.kt:1672)
	at com.intellij.serviceContainer.ComponentManagerImplKt.access$throwAlreadyDisposedIfNotUnderIndicatorOrJob(ComponentManagerImpl.kt:1)
	at com.intellij.serviceContainer.ComponentManagerImpl.doGetService(ComponentManagerImpl.kt:716)
	at com.intellij.serviceContainer.ComponentManagerImpl.getService(ComponentManagerImpl.kt:690)
	at com.phodal.shirelang.run.ShireProgramRunner$doExecute$1.runFinish(ShireProgramRunner.kt:44)
	at com.intellij.util.messages.impl.MessageBusImplKt.invokeMethod(MessageBusImpl.kt:722)
	at com.intellij.util.messages.impl.MessageBusImplKt.invokeListener(MessageBusImpl.kt:682)
	at com.intellij.util.messages.impl.MessageBusImplKt.deliverMessage(MessageBusImpl.kt:445)
	at com.intellij.util.messages.impl.MessageBusImplKt.pumpWaiting(MessageBusImpl.kt:424)
	at com.intellij.util.messages.impl.MessageBusImplKt.access$pumpWaiting(MessageBusImpl.kt:1)
	at com.intellij.util.messages.impl.MessagePublisher.invoke(MessageBusImpl.kt:483)
	at jdk.proxy20/jdk.proxy20.$Proxy320.runFinish(Unknown Source)
	at com.phodal.shirelang.run.ShireProcessAdapter.processTerminated(ShireRunConfigurationProfileState.kt:149)
	at com.intellij.execution.process.ProcessHandler$2.processTerminated(ProcessHandler.java:262)
	... 21 more
Caused by: com.intellij.platform.instanceContainer.internal.ContainerDisposedException: Container 'ProjectImpl@124637602 services' was disposed
	at com.intellij.platform.instanceContainer.internal.InstanceContainerImpl.state(InstanceContainerImpl.kt:60)
	at com.intellij.platform.instanceContainer.internal.InstanceContainerImpl.state(InstanceContainerImpl.kt:40)
	at com.intellij.platform.instanceContainer.internal.InstanceContainerImpl.getInstanceHolder(InstanceContainerImpl.kt:277)
	at com.intellij.serviceContainer.ComponentManagerImpl.doGetService(ComponentManagerImpl.kt:712)
	... 32 more
Caused by: com.intellij.platform.instanceContainer.internal.DisposalTrace
	at com.intellij.platform.instanceContainer.internal.InstanceContainerImpl.dispose(InstanceContainerImpl.kt:266)
	at com.intellij.serviceContainer.ComponentManagerImpl.dispose(ComponentManagerImpl.kt:1164)
	at com.intellij.openapi.project.impl.ProjectImpl.dispose(ProjectImpl.kt:321)
	at com.intellij.openapi.util.ObjectTree.runWithTrace(ObjectTree.java:131)
	at com.intellij.openapi.util.ObjectTree.executeAll(ObjectTree.java:163)
	at com.intellij.openapi.util.Disposer.dispose(Disposer.java:205)
	at com.intellij.openapi.util.Disposer.dispose(Disposer.java:193)
	at com.intellij.openapi.project.impl.ProjectManagerImpl.closeProject$lambda$15(ProjectManagerImpl.kt:423)
	at com.intellij.openapi.application.impl.AnyThreadWriteThreadingSupport.runWriteAction$lambda$4(AnyThreadWriteThreadingSupport.kt:318)
	at com.intellij.openapi.application.impl.AnyThreadWriteThreadingSupport.runWriteAction(AnyThreadWriteThreadingSupport.kt:328)
	at com.intellij.openapi.application.impl.AnyThreadWriteThreadingSupport.runWriteAction(AnyThreadWriteThreadingSupport.kt:318)
	at com.intellij.openapi.application.impl.ApplicationImpl.runWriteAction(ApplicationImpl.java:890)
	at com.intellij.openapi.project.impl.ProjectManagerImpl.closeProject(ProjectManagerImpl.kt:406)
	at com.intellij.openapi.project.impl.ProjectManagerImpl.closeProject$default(ProjectManagerImpl.kt:328)
	at com.intellij.openapi.project.impl.ProjectManagerImpl.closeAndDispose(ProjectManagerImpl.kt:435)
	at com.intellij.openapi.wm.impl.CloseProjectWindowHelper.closeProjectAndShowWelcomeFrameIfNoProjectOpened(CloseProjectWindowHelper.kt:57)
	at com.intellij.openapi.wm.impl.CloseProjectWindowHelper.windowClosing(CloseProjectWindowHelper.kt:44)
	at com.intellij.openapi.wm.impl.ProjectFrameHelper.windowClosing(ProjectFrameHelper.kt:428)
	at com.intellij.openapi.wm.impl.WindowCloseListener.windowClosing(ProjectFrameHelper.kt:451)
	at java.desktop/java.awt.AWTEventMulticaster.windowClosing(AWTEventMulticaster.java:357)
	at java.desktop/java.awt.AWTEventMulticaster.windowClosing(AWTEventMulticaster.java:357)
	at java.desktop/java.awt.AWTEventMulticaster.windowClosing(AWTEventMulticaster.java:357)
	at java.desktop/java.awt.AWTEventMulticaster.windowClosing(AWTEventMulticaster.java:357)
	at java.desktop/java.awt.AWTEventMulticaster.windowClosing(AWTEventMulticaster.java:357)
	at java.desktop/java.awt.Window.processWindowEvent(Window.java:2115)
	at java.desktop/javax.swing.JFrame.processWindowEvent(JFrame.java:298)
	at java.desktop/java.awt.Window.processEvent(Window.java:2074)
	at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5035)
	at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2324)
	at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2810)
	at java.desktop/java.awt.Component.dispatchEvent(Component.java:4860)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:783)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:728)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:722)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:400)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:98)
	at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:755)
	at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:753)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:400)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87)
	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:752)
	at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.kt:696)
	at com.intellij.ide.IdeEventQueue._dispatchEvent$lambda$16(IdeEventQueue.kt:590)
	at com.intellij.openapi.application.impl.AnyThreadWriteThreadingSupport.runWithoutImplicitRead(AnyThreadWriteThreadingSupport.kt:117)
	at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.kt:590)
	at com.intellij.ide.IdeEventQueue.access$_dispatchEvent(IdeEventQueue.kt:73)
	at com.intellij.ide.IdeEventQueue$dispatchEvent$processEventRunnable$1$1$1$1.compute(IdeEventQueue.kt:357)
	at com.intellij.ide.IdeEventQueue$dispatchEvent$processEventRunnable$1$1$1$1.compute(IdeEventQueue.kt:356)
	at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:843)
	at com.intellij.ide.IdeEventQueue$dispatchEvent$processEventRunnable$1$1$1.invoke(IdeEventQueue.kt:356)
	at com.intellij.ide.IdeEventQueue$dispatchEvent$processEventRunnable$1$1$1.invoke(IdeEventQueue.kt:351)
	at com.intellij.ide.IdeEventQueueKt$performActivity$runnableWithWIL$1.invoke$lambda$0(IdeEventQueue.kt:1035)
	at com.intellij.openapi.application.WriteIntentReadAction.lambda$run$0(WriteIntentReadAction.java:24)
	at com.intellij.openapi.application.impl.AnyThreadWriteThreadingSupport.runWriteIntentReadAction(AnyThreadWriteThreadingSupport.kt:84)
	at com.intellij.openapi.application.impl.ApplicationImpl.runWriteIntentReadAction(ApplicationImpl.java:910)
	at com.intellij.openapi.application.WriteIntentReadAction.compute(WriteIntentReadAction.java:55)
	at com.intellij.openapi.application.WriteIntentReadAction.run(WriteIntentReadAction.java:23)
	at com.intellij.ide.IdeEventQueueKt$performActivity$runnableWithWIL$1.invoke(IdeEventQueue.kt:1035)
	at com.intellij.ide.IdeEventQueueKt$performActivity$runnableWithWIL$1.invoke(IdeEventQueue.kt:1035)
	at com.intellij.ide.IdeEventQueueKt.performActivity$lambda$1(IdeEventQueue.kt:1036)
	at com.intellij.openapi.application.TransactionGuardImpl.performActivity(TransactionGuardImpl.java:114)
	at com.intellij.ide.IdeEventQueueKt.performActivity(IdeEventQueue.kt:1036)
	at com.intellij.ide.IdeEventQueue.dispatchEvent$lambda$10(IdeEventQueue.kt:351)
	at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.kt:397)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:207)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:92)

代码内容:

---
name: "hello"
actionLocation: ContextMenu
variables:
  "var2": /.*ple.shire/ { thread(".shire/ffi/run-python.sh") }
---

hello, $var2

run-python.sh

#!/bin/bash

# 检查是否安装了Python
if ! command -v python3 &> /dev/null
then
    echo "Python is not installed. Please install Python before running this script."
    exit
fi

# 运行hello.py脚本
python3 alert.py

alert.py

import tkinter as tk
from tkinter import ttk
from tkinter.scrolledtext import ScrolledText

def show_input_dialog():
    # 创建主窗口
    root = tk.Tk()
    root.title("Input Dialog")  # 使用英文标题,保持与IDE一致

    # 设置窗口大小和位置
    window_width = 500
    window_height = 320
    screen_width = root.winfo_screenwidth()
    screen_height = root.winfo_screenheight()
    center_x = int(screen_width/2 - window_width/2)
    center_y = int(screen_height/2 - window_height/2)
    root.geometry(f'{window_width}x{window_height}+{center_x}+{center_y}')

    # 设置现代深色主题
    root.configure(bg='#2b2b2b')  # IntelliJ暗色主题背景色

    # 配置ttk样式
    style = ttk.Style()
    style.theme_use('clam')  # 使用clam主题作为基础

    # 自定义样式
    style.configure('Custom.TFrame', background='#2b2b2b')
    style.configure('Custom.TLabel',
        background='#2b2b2b',
        foreground='#bababa',  # IntelliJ文字颜色
        font=('Segoe UI', 12)
    )

    # 扁平化主按钮样式
    style.configure('Primary.TButton',
        background='#4B6EAF',
        foreground='#ffffff',
        padding=(16, 4),  # 减小垂直内边距
        font=('Segoe UI', 11),
        relief='flat',  # 扁平化效果
        borderwidth=0   # 移除边框
    )
    style.map('Primary.TButton',
        background=[('active', '#5881d8')],
        foreground=[('active', '#ffffff')],
        relief=[('pressed', 'flat')]  # 按下时保持扁平
    )

    # 扁平化次要按钮样式
    style.configure('Secondary.TButton',
        background='#3C3F41',
        foreground='#bababa',
        padding=(16, 4),  # 减小垂直内边距
        font=('Segoe UI', 11),
        relief='flat',  # 扁平化效果
        borderwidth=0   # 移除边框
    )
    style.map('Secondary.TButton',
        background=[('active', '#494b4d')],
        foreground=[('active', '#ffffff')],
        relief=[('pressed', 'flat')]  # 按下时保持扁平
    )

    # 创建主容器
    main_frame = ttk.Frame(root, style='Custom.TFrame')
    main_frame.pack(fill=tk.BOTH, expand=True, padx=20, pady=15)

    # 创建标签
    label = ttk.Label(
        main_frame,
        text="Enter your content:",
        style='Custom.TLabel'
    )
    label.pack(anchor='w', pady=(0, 10))

    # 创建文本框
    text_widget = ScrolledText(
        main_frame,
        width=40,
        height=10,
        font=('JetBrains Mono', 12),  # 使用JetBrains字体
        wrap=tk.WORD,
        bg='#313335',  # 编辑器背景色
        fg='#bababa',  # 文字颜色
        insertbackground='#bababa',  # 光标颜色
        selectbackground='#214283',  # 选中文本背景色
        selectforeground='#ffffff',  # 选中文本前景色
        relief='flat',
        borderwidth=1
    )
    text_widget.pack(fill=tk.BOTH, expand=True, pady=(0, 8))

    # 添加默认提示文本
    placeholder = "Type your content here...\n\nSupports multiple lines"
    text_widget.insert('1.0', placeholder)
    text_widget.configure(fg='#666666')  # 提示文本颜色

    # 用于存储结果的变量
    result = {'text': None}

    # 按钮回调函数
    def on_confirm():
        result['text'] = text_widget.get('1.0', tk.END).strip()
        root.destroy()

    def on_cancel():
        result['text'] = None
        root.destroy()

    # 清除提示文本的函数
    def clear_placeholder(event):
        if text_widget.get('1.0', tk.END).strip() == placeholder.strip():
            text_widget.delete('1.0', tk.END)
            text_widget.configure(fg='#bababa')

    # 恢复提示文本的函数
    def restore_placeholder(event):
        if not text_widget.get('1.0', tk.END).strip():
            text_widget.insert('1.0', placeholder)
            text_widget.configure(fg='#666666')

    # 绑定事件
    text_widget.bind('<FocusIn>', clear_placeholder)
    text_widget.bind('<FocusOut>', restore_placeholder)

    # 创建按钮框架
    button_frame = ttk.Frame(main_frame, style='Custom.TFrame')
    button_frame.pack(fill=tk.X, pady=(0, 2))

    # 创建按钮
    cancel_btn = ttk.Button(
        button_frame,
        text="Cancel",
        style='Secondary.TButton',
        command=on_cancel
    )
    cancel_btn.pack(side=tk.RIGHT, padx=(4, 0))

    confirm_btn = ttk.Button(
        button_frame,
        text="Commit",
        style='Primary.TButton',
        command=on_confirm
    )
    confirm_btn.pack(side=tk.RIGHT)

    # 设置窗口为模态
    root.transient()
    root.grab_set()

    # 绑定ESC键为取消
    root.bind('<Escape>', lambda e: on_cancel())
    # 绑定回车键为确认
    root.bind('<Return>', lambda e: on_confirm())

    root.mainloop()

    return result['text']

if __name__ == "__main__":
    result = show_input_dialog()
    if result:
        print(f"User input:{result}")
    else:
        print("User cancelled the input")
phodal added a commit to shire-lang/shire-demo that referenced this issue Dec 1, 2024
@phodal phodal closed this as completed in 6cb04d9 Dec 1, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant