【问题标题】:Netbeans 8.0.2 Clean and Build then Run results in old code being runNetbeans 8.0.2 Clean and Build then Run 导致运行旧代码
【发布时间】:2018-05-23 20:01:48
【问题描述】:

我是 NetBeans 和 Java 的新手。我正在使用 NetBeans 为学校构建和运行 Java Swing 项目。

我在 NetBeans 中编写了我的代码并保存了它。使用javac 从命令行编译成功,程序按预期运行。如果我更新代码并从 CLI 重复该过程,新的更改将按预期反映。

如果我在 NetBeans 和Clean and Build 中进行代码更改(例如通过按 Shift+F11),然后在 NetBeans 中运行(例如通过 F6),则更改将反映。没有错误,我只是在输出中收到BUILD SUCCESSFUL 通知。但旧版本的应用程序将运行时不会反映任何更改。

我通过从 CLI 构建来解决它,但它变得非常快,能够在 IDE 中运行会很好。

以下是一些上下文代码。它根据需要运行。作为我的问题的一个示例,请注意文件 2 中的按钮初始化。如果我更改了 ctor 字符串 arg,那么当我在 NetBeans 中清理、构建和运行时,更改将不会反映(或者如果我只是在没有清理的情况下构建和运行)。但是,如果从命令行运行,它将被反映。

文件 1:

/* pkg & import statements */

public class Project1Part1 {

    public static void main(String[] args) {
        System.out.println("Attempting to build frame...");
        buildFrame();
    }

    public static void buildFrame()
    {
        JFrame frame = new JFrame("Project 1, Part 1");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        GuiPanel guiPanel = new GuiPanel();
        frame.setContentPane(guiPanel);
        frame.setSize(640, 360);
        frame.setVisible(true);
        System.out.println("Frame built.");
    }
}

文件 2:

/* pkg and import statements */

public class GuiPanel extends JPanel {

    public GuiPanel()
    {
        LayoutManager layoutMgr = new FlowLayout();
        setLayout(layoutMgr);

        Dimension buttonSize = new Dimension(150, 20);
        JButton cardPickerButton = new JButton("Card Picker");
        cardPickerButton.setPreferredSize(buttonSize);
        add(cardPickerButton);
    }
}

更新: 根据我看到的其他帖子,我将我的 Ant 版本从 1.9.4 升级到 1.9.6 作为在黑暗中的镜头,它没有任何区别。

更新 2: 我只使用了BuildClean and Build 选项,它们不用于编译应用程序以在IDE 中运行。保存文件时,默认情况下 NetBeans 会自动编译项目,如下所示: the NetBeans documentation。同样,如果用户选择Run,所有未保存的文件将在 NetBeans 运行应用程序之前自动保存和编译。我的问题是我习惯于 Clean and Build 意味着不同的东西,所以每次我想在 IDE 中运行应用程序时,我都在运行 Clean and Build。一旦在 NetBeans 中选择了 Clean and Build 或什至 Build 选项,我还没有找到强制重新编译以在 IDE 中执行的方法,除了进行微不足道的更改以允许重新保存项目中的某些文件。

更新 3: 按要求添加我的项目的build.xml。为了便于阅读,我删除了评论部分。

<?xml version="1.0" encoding="UTF-8"?>
<project name="Project1Part1" default="default" basedir=".">
    <description>Builds, tests, and runs the project Project1Part1.</description>
    <import file="nbproject/build-impl.xml"/>
</project>

【问题讨论】:

  • 您能否发布您的build.xml 中编译/执行代码的部分(包括解析变量所需的所有部分,如果使用)。
  • 添加了整个文件,不包括 cmets 它只有 5 行。不太确定这个文件中应该发生什么。这是否用于告诉 NetBeans 更新它自己的应用程序版本以及它生成的外部构建?
  • 好吧,我认为这是一个基于 Ant 的独立项目。您是否使用 Netbeans 向导创建了这个项目?如果您更改GuiPanel.java 中的按钮文本并按下F6,那么GuiPanle.java 会被保存并ProjectPart1 会被执行吗?
  • 是的,我使用了向导。是的,按 F6 确实会导致项目编译时更改可见。
  • 您的项目是否引用了另一个项目(在项目属性的“库”部分中)?如果您禁用“保存时编译”功能,它是否有效?我看到启用它时会发生奇怪的事情(尽管主要是基于 Maven 的项目)。您是否在项目属性的“编译”部分中启用了“跟踪依赖项”选项?

标签: java netbeans


【解决方案1】:

您无需执行任何特殊操作即可运行最新版本。在有或没有构建或清理的情况下运行,构建将运行最新版本。我以前有过这种症状,结果总是有源文件和/或项目文件的多个副本。 Netbeans 正在使用一个来运行,而我在错误的目录中编辑了一个副本,期望它会产生效果。

试试这个:

  1. 从文件菜单中选择关闭所有项目
  2. 从窗口菜单中选择关闭所有文档
  3. 使用 File -> Open Project 再次打开项目,注意目录。
  4. 通过双击打开一个源文件,这是项目选项卡中源包下的 java 文件之一。
  5. 进行更改,构建然后运行。
  6. 如果您仍然遇到问题,则可能是您的 Netbeans 安装有问题。考虑关闭 Netbeans,删除用户配置和缓存目录。 (http://wiki.netbeans.org/FaqWhatIsUserdir),然后重新安装 Netbeans。

【讨论】:

    【解决方案2】:

    在基于 Maven 的项目中,许多缓存输出都在您的“目标”文件夹中。

    如果清除不起作用,只需删除 target 文件夹并运行项目即可。

    【讨论】:

      【解决方案3】:

      Shift + f11

      工作得很好。

      不客气/n

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-30
        • 1970-01-01
        • 1970-01-01
        • 2011-04-26
        • 2020-09-11
        • 1970-01-01
        相关资源
        最近更新 更多