我在这里有一个奇怪的问题,我无法全神贯注。代码如下-它确实是一个存根,什么也不会发生,但是它对于说明问题的必要性最小:
package playground;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MenuDetectEvent;
import org.eclipse.swt.events.MenuDetectListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
/**
*
* @author k
*/
public class ButtonTest {
public static void main(String[] args) {
Display d = new Display();
Shell s = new Shell(d);
Button b = new Button(s, SWT.PUSH);
b.addSelectionListener(new SelectionListener() {
@Override
public void widgetSelected(SelectionEvent se) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public void widgetDefaultSelected(SelectionEvent se) {
throw new UnsupportedOperationException("Not supported yet.");
}
});
b.addMenuDetectListener(new MenuDetectListener() {
@Override
public void menuDetected(MenuDetectEvent mde) {
throw new UnsupportedOperationException("Not supported yet.");
}
});
}
}
代码在netbeans中运行,构建为
OK
。当将ant
与自定义build.xml
一起使用时,构建会抱怨无法找到符号b
。我的构建文件是<project name="Test" default="compile" basedir=".">
<target name="compile">
<mkdir dir="build" />
<javac srcdir="src" destdir="build" debug="on">
<classpath>
<fileset dir="/home/k/lab/ccagent/lib">
<include name="*.jar" />
</fileset>
</classpath>
</javac>
</target>
</project>
并调用
ant
会导致Buildfile: /home/k/NetBeansProjects/Playground/build.xml
compile:
[javac] /home/k/NetBeansProjects/Playground/build.xml:4: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
[javac] Compiling 5 source files to /home/k/NetBeansProjects/Playground/build
[javac] /home/k/NetBeansProjects/Playground/src/playground/ButtonTest.java:34: error: cannot find symbol
[javac] b.addMenuDetectListener(new MenuDetectListener() {
[javac] ^
[javac] symbol: method addMenuDetectListener(<anonymous MenuDetectListener>)
[javac] location: variable b of type Button
[javac] 1 error
BUILD FAILED
让我真正困惑的是:错误发生在
b.addMenuDetectListener(…)
处,而不是发生在b.addSelectionListener(…)
处。由于Netbeans可以毫无疑问地编译和运行代码,所以我想知道build.xml
中是否有错误?用netbeans创建的build.xml
调用ant的编译也没有错误。因此,这里有两个问题:
为什么编译器在
b.addMenuDetectListener
而不是b.addSelectionListener
抱怨?为什么我的
build.xml
失败了,但是Netbean的失败了?
最佳答案
@roberts提示正在解决问题:在swt
中引用的lib
目录中有一个旧的build.xml
版本。尽管netbeans似乎包含特定版本,但在我的build.xml
中给出的路径导致加载了找到的第一个swt
版本,该版本是3.1,而该版本不提供addMenuDetectListener
。
因此,不是b
是罪魁祸首,而是
关于java - 使用ant和自定义build.xml进行编译时出错,但在netbeans中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58138736/