在创建匿名子类的内部类的匿名子类时,Netbeans无法找到主类

时间:2014-12-19 08:06:47

标签: java netbeans inner-classes anonymous-class anonymous-inner-class

当我尝试在其包含类的类的匿名子类的初始化内创建一个新的匿名Action子类时,Netbeans突然无法在运行时找到主类,尽管能够清理+构建没有问题,并使用此代码运行注释掉。 script.new Action(0) {...} causes "Error: Could not find or load main class" when running Commenting the code out leads to successful run

代码结构:

主要包裹:

  • 主要类< - 目前正在查看此文件
    • public void run(...)(在main(String [] args中调用))
      • 演员a =新演员(){
        • 脚本脚本=新脚本();
        • {(演员实例启动代码)
          • script.new Action(0){...}导致破损
  • 套餐演员
    • 公共抽象类Actor
      • 公共类脚本
        • 公共抽象类行动

在一个简单的类中复制:

package tests;

public class ClassTester {
    public static void main(String[] args) {
        ClassTester tester = new ClassTester();
        tester.run();
    }
    public void run() {
        final Inner1 A = new Inner1() {
            {
                B = this.new Inner2() {
                    @Override
                    public void run() {
                        System.out.println("Hello, world!");
                    }
                };
            }
        };
        A.B.run();
    }
    public class Inner1 {
        public Inner2 B;
        public abstract class Inner2 implements Runnable {
        }
    }
}
-->
Error: Could not find or load main class tests.ClassTester
Java Result: 1

有趣的是,-XX:+ PrintCompilation显示在崩溃之前运行的东西:

     50    1             java.lang.String::hashCode (55 bytes)
     50    2             java.lang.String::charAt (29 bytes)
Error: Could not find or load main class tests.ClassTester
Java Result: 1

产品版本:NetBeans IDE 7.3.1(Build 201306052037) Java:1.7.0_25; Java HotSpot(TM)64位服务器VM 23.25-b01 运行时:Java(TM)SE运行时环境1.7.0_25-b17 系统:在amd64上运行的Windows 7版本6.1; CP1252; en_US(nb)

清理和构建并重新启动Netbeans尚未解决问题。这是可修复的还是Netbeans中的错误?

1 个答案:

答案 0 :(得分:1)

我能够在NetBeans 7.3.1中重现该问题。问题似乎与bug #224770有关。修复摘要为#224770: making handling of new with enclosing expression more similar to vanilla javac, while preserving the correct outputs from the API.

您有两种选择。

  1. 将NetBeans升级到7.4或更高版本。我在7.4中测试了代码,它运行正常。
  2. 继续使用NetBeans 7.3,并且不要使用" this.new"。将第11行更改为:

    B = new Inner2(){