在Eclipse中使用PyDev调试jython代码时,无法为用户生成的操作命中断点

时间:2010-10-08 08:50:01

标签: eclipse debugging swing jython pydev

我正在使用Eclipse和PyDev插件在Jython中实现GUI应用程序。 问题是我很难使用内置调试器。当我开始调试会话时,它就会停止。当然这应该是预期的,因为程序只是创建一个JFrame,然后它就完成了。

所以我为不同的事件提出了任何断点。按下按钮,永远不会发生,因为调试会话已经终止。

我该怎么办?我越来越厌倦了使用打印机进行所有调试。

例如,当我尝试调试这个小Java示例时。我没有遇到任何问题 我在windowClosing-method

中设置的断点
import java.awt.event.*;
import javax.swing.*;
public class Test1 {

public static void main(String s[]) {
    JFrame frame = new JFrame("JFrame Source Demo");
    // Add a window listner for close button
    frame.addWindowListener(new WindowAdapter() {

        public void windowClosing(WindowEvent e) {
            System.exit(0);
        }
    });
    frame.setVisible(true);
}
}

然后我在jython中尝试了这个或多或少类似的例子

from javax.swing import JFrame;
import java.awt.event.WindowListener as WindowListener

class Test1 (JFrame, WindowListener):
    def __init__(self):
        super(JFrame, self).__init__('Some name goes here', defaultCloseOperation = JFrame.EXIT_ON_CLOSE, size = (800, 800))
        self.addWindowListener(self)        
        self.setVisible(True)

    def windowClosing(self, windowEvent):
        print 'window closing'
        pass # want to hit this breakpoint

someFrame = Test1()
pass #breakpoint here maybe

如果我试图在调试器中运行jython示例,它就会终止。好吧,我在windowClosing方法中创建someFrame和断点后添加了一个断点。仍然没有运气,当我关闭窗口时它没有被击中,但我看到它在我看到打印输出时执行。

谁能告诉我我做错了什么?我确定我忘记了一些非常简单的事情。

2 个答案:

答案 0 :(得分:2)

在主方法的第一行中放置一个断点,用于启动应用程序。

如果要调试某些操作(如按下按钮),请在按钮中添加动作侦听器,并在处理方法内添加断点。例如:

JButton button = new JButton("OK");
button.addActionListener(new ActionListener()
 {
  @Override
  public void action(ActionEvent e)
  {
   System.out.println("button OK has been pressed"; // add breakpoint here
   // call to some code that handles the event
  }
});

答案 1 :(得分:1)

我遇到了同样的问题

btnCompilar = new JButton("Compilar");
btnCompilar.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent arg0) {
         compile(); //can't hit breakpoint here
    }
});

我无法在actionPerformed中点击断点,所以我只创建了一个方法并在其中使用了断点。

void compile(){  
    //can hit breakpoint here
}