3

不知道为什么会发生这种情况......好吧,情况就是这样:我的笔记本电脑上有一个 nb 项目。我的桌面上有相同的项目。我复制桌面上的源(不是整个项目),覆盖桌面源。一切都清理干净并且构建正常。然后我启动调试器。在主类上,我可以逐步调试。如果它进入内部方法,则会发生以下情况:

Listening on 37574
User program running
LineBreakpoint test.java : 45 successfully submitted.
Breakpoint hit at line 45 in class test by thread main.
Thread main stopped at test.java:45.
User program running
Not able to submit breakpoint LineBreakpoint baseControllerManager.java : 41, reason: No executable location available at line 41 in class baseClasses.JNW.baseControllerManager.
Invalid LineBreakpoint baseControllerManager.java : 41
Debugger stopped on uncompilable source code.
User program finished

正如您所看到的,直到我在静态方法 main 中它才起作用(第 45 行),因为我跳入了一个非静态方法(即覆盖),它随之而来......我试图:

  • 清理和构建 = 没有效果
  • 手动删除 build 和 dist = 无效

你有什么建议?

为了完整起见,我附上了主类的来源:

import baseClasses.JNW.baseAction;
import baseClasses.JNW.baseContResult;
import baseClasses.JNW.baseController;
import baseClasses.JNW.baseControllerManager;

public class test {

    public static class starter extends baseController {

        public static final String ACTION_START = "ACTION_START";

        @Override
        public baseContResult doAction(baseAction action) {

            if (ACTION_START.equals(action.action)) {
                manager.log("action start...");
                return new baseContResult(RESULT_OK, baseContResult.resultType.RESULT_OK);
            }
            return super.doAction(action);
        }

        @Override
        public void init() {
            super.init();
        }
    }

    public void startMe() {
        baseControllerManager manager;
        try {
            manager = new baseControllerManager();
        } catch (Exception e) {
            e.printStackTrace();
            return;
        }
        starter st = new starter();
        manager.setMainController(st);
        manager.doAction(new baseAction(starter.ACTION_START));
    }

    public static void main(String args[]) {


        test te = new test();
        te.startMe();

    }
}
4

4 回答 4

2

在文件nbproject/project.properties中查找该属性javac.debug并确保它是“真实的”。如果是,则在 nbproject 目录的其他位置和任何本地 ant 设置中对该属性进行 grep。

关于半相关的说明:当我在 NetBeans 中创建项目时,即使源已经存在于其他地方,我总是会创建一个新的“Java 应用程序”,并让它根据需要填充项目目录。然后我可以移入我的源代码并更新项目,NetBeans 仍然很高兴。


尝试设置后编辑javac.debug

再次查看您的问题,我看到您能够在 上设置断点test.java,但无法在 上设置断点baseControllerManager.java。这向我表明你是从某个地方的 JAR 中获取后一个类,而不是从你的项目目录中。

所以第一步是确保你没有定义CLASSPATH环境变量。无论您使用的是 IDE 还是手动构建,这绝不是一件好事。

下一步是查看您为 NetBeans 项目指定的库。您可以grep在 JARfile 上使用;文件目录是纯文本的。查找不合格的类名就足够了。

最后一件事是通过在构建目录中查找来验证您是否确实在编译该类。

于 2010-01-19T13:00:25.183 回答
1

project.properties 中不存在该属性。所以我添加了它(在有许多 javac.* 属性的地方......)。然后我像这样grep:

dario@dario-desktop:~/Scrivania/JNW$ grep -r javac.debug *
nbproject/project.properties:javac.debug=true
nbproject/build-impl.xml:        <property name="javac.debug" value="true"/>
nbproject/build-impl.xml:            <attribute default="${javac.debug}" name="debug"/>
nbproject/build-impl.xml:                <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" fork="${javac.fork}" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}" tempdir="${java.io.tmpdir}">
nbproject/private/private.properties:javac.debug=true
nbproject/project.properties~:javac.debug=true

事实上,它在最后一行看到了我的添加。

我清理并重建了项目。调试器不再工作............我想我会踢我的老板,直到他同意使用 eclipse 或者他解雇我。我会失业,但我很高兴。除了开玩笑,@kdgrgory,你还有什么想法吗???

于 2010-01-19T13:31:45.627 回答
1

通常,无法编译的错误意味着无法解析符号。

如果您对其他项目、库或 jar 有依赖关系,请确保它们已成功构建/存在。

检查“在类路径上构建项目”(在项目属性 > 构建 > 编译中)通常会解决此问题。如果您没有选中此项,则有责任确保已经构建了依赖项。

于 2010-01-18T17:41:26.983 回答
0

我遇到了同样的问题,发现如果我从项目选项卡运行 clean 就可以解决问题。

于 2013-08-19T05:56:30.333 回答