为什么 Eclipse 调试器会无缘无故地报错“Source not found”?

新手上路,请多包涵

当我在 Eclipse 中调试时,经常会发生调试器崩溃的情况,并显示错误消息“未找到源”(在该消息下方是一个带有文本“编辑源查找路径”的按钮)。我以前在网上搜索过这个问题的解释/解决方案,但没有找到任何帮助。

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

我在这个问题的底部提供了一个 MWE。当我在该行放置断点时发生错误

System.out.println("You clicked!");

并使用 F6(“Step Over”)逐行退出该方法。如果我在侦听器的最后一行按 F8(“恢复”)而不是 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);
    }
}

原文由 andreasdr 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 923
2 个回答

Eclipse 不会崩溃。您正在尝试进入一种方法,其中 eclipse 不知道在哪里可以找到源( *.java )文件并通知您这件事。下面是如何告诉 Eclipse 去哪里看。去

Window -> Preferences -> Java -> Installed JREs ,选择您正在使用的 JRE,然后单击 Edit

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

在出现的窗口中,选择 fille src.zip ,它位于您的 JDK 文件夹中(如果您在安装 JDK 时没有取消选中它)。在我现在使用的机器上,就是

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

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

原文由 jlordo 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

原文由 El Hocko 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题