【发布时间】: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:
我只使用了Build 和Clean 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 的项目)。您是否在项目属性的“编译”部分中启用了“跟踪依赖项”选项?