为什么Eclipse调试器似乎没有理由地给出“Source not found”错误?

时间:2013-02-16 19:23:51

标签: java eclipse debugging

当我在Eclipse中调试时,经常发生调试器崩溃,显示错误消息“Source not found”(其下是一个带有“Edit Source Lookup Path”文本的按钮)。我之前在网上搜索过这个问题的解释/解决方案,但没有找到任何帮助。

但是,我现在已经弄清楚在我的情况下发生了什么:逐行单步执行代码,然后逐步退出运行代码块时出现错误。我不知道术语,但我猜许多应用程序可能会在某些时候进入“待机模式”,其中没有任何代码当前正在运行。一个示例是等待鼠标单击的图形应用程序。在MouseListener方法中停止断点,然后退出它(进入“待机模式”)将导致我的错误。

我在这个问题的底部提供了一个MWE。当我在行

处放置断点时发生错误
System.out.println("You clicked!");

并使用F6逐步退出方法(“Step Over”)。如果我在侦听器的最后一行按F8(“Resume”)而不是F6,调试器不会崩溃,一切都很好。

我的问题是:为什么Eclipse在这种情况下会做一些如此严重的崩溃?据我所知,源代码中没有一行可以说程序控件在下面的示例中离开监听器后可以说“步入”,但为什么不进入“待机模式”而不抱怨?我可以以某种方式停用此错误,以防止我的调试会话经常遇到不合时宜的结束吗?或者我只需记得按F8而不是F6,后者会导致崩溃?

package app;

import java.awt.Dimension;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JFrame;


public class TestFrame extends JFrame {
    public TestFrame() {
        getContentPane().setPreferredSize(new Dimension(200, 200));
        getContentPane().addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                System.out.println("You clicked!");
            }
        });
        pack();
    }

    public static void main(String[] args) {
        JFrame testFrame = new TestFrame();
        testFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        testFrame.setVisible(true);
    }
}

3 个答案:

答案 0 :(得分:22)

Eclipse不会崩溃。您正试图进入一个方法,其中eclipse不知道在哪里找到源(*.java)文件并通知您。这是如何告诉eclipse在哪里看。转到

Window - > 偏好设置 - > Java - > 已安装的JRE ,选择您正在使用的JRE,然后单击编辑

在那里,选择您看到的列表中的所有jar文件,然后单击 Source Attachment ...

在显示的窗口中,选择JDK文件夹中的文件src.zip(如果在安装JDK时未取消选中它)。在我现在的机器上,那是

C:\Program Files\Java\jdk1.7.0_07\src.zip

保存所有更改(可能重启eclipse),您将不会再次看到该错误。

答案 1 :(得分:4)

转到 window-> preferences-> java->安装了jres 并删除jre,然后执行“添加” 并寻找JDK而不是JRE!

答案 2 :(得分:0)

“找不到源”错误可以通过提供类文件的源(即.java文件)来解决,以便它可以导航到源文件。否则,您可以要求反编译器直接打开.class文件。

  

转到Eclipse->帮助-> Eclipse MarketPlace->搜索反编译器并   安装它。

现在,问题可以解决。