个人eclipse里有一堆测试用的Java文件,今天打算写一段代码,因而随便点开一个文件,发现打不开。如图:java
虽然在eclipse里打不开,可是用notepad++倒是能打开的,这说明文件没有损坏。eclipse
之前没遇到过这个错误。不知道怎么解决。函数
因而点开Details看了一下,nullPointerException...反正是一堆错误的信息,都是eclipse内部的异常,没啥用。测试
而后我想,是否是文件名有问题,但是Test.java这种文件名怎么会有问题呢。ui
度娘!发现没人遇到相似的问题。spa
StackOverflow!那上有人遇到了这个问题,有人说switch workspace一下会好,有人说把plugins文件夹里的大部分文件删掉。我试了一下switch workspace,没用,仍是打不开。插件
至于插件,不仍是不想动那个文件夹。code
因而继续找问题。ip
新建一个类文件,把问题文件里的代码所有考到新文件里,保存,关闭文件,再打开,果真这个新文件也打不开了。编译器
而后怀疑是否是jdk8插件的问题,由于这个类里有写jdk8用到的一些东西,好比stream,是否是这里出了问题。
查看build path,发现配置有点问题,有个地方选了jdk7(具体哪一个地方我忘了),把编译器和执行环境调整到jdk8以后,文件仍是打不开。
而后我把文件里的代码一段一段的考到新文件,考到哪里出问题,就分析那一段。
出问题的是这个函数:
@SuppressWarnings("unused") private static void testParallelStream() { long t0 = System.nanoTime(); // 初始化一个范围100万整数流,求能被2整除的数字,toArray()是终点方法 int a[] = IntStream.range(0, 1_000_000).filter(p -> p % 2 == 0).toArray(); long t1 = System.nanoTime(); // 和上面功能同样,这里是用并行流来计算 int b[] = IntStream.range(0, 1_000_000).parallel().filter(p -> p % 2 == 0).toArray(); long t2 = System.nanoTime(); // 我本机的结果是serial: 0.06s, parallel 0.02s,证实并行流确实比顺序流快 System.out.printf("serial: %.2fs, parallel %.2fs%n", (t1 - t0) * 1e-9, (t2 - t1) * 1e-9); }
我觉得是开头的注释在解析的时候出现的问题,而后把注释删掉了,可是仍是打不开文件。
而后把函数里的内容所有注释,这下能够打开文件了。
看来问题出在函数体里。
里面的汉语注释应该没什么问题,那就一段一段的测吧
而后发现,是这一句的问题:
int a[] = IntStream.range(0, 1_000_000).filter(p -> p % 2 == 0).toArray();
这里用到了jdk7和jdk8的特性,我把数字里的下划线去掉,发现文件能够打开了。
查看另外一个打不开的文件,一样有这种下划线式的数字表示法。去掉下划线,就能够打开了。
可能别人在eclipse里这样写就不会出问题,那就是个人eclipse环境比较特殊吧。
问题解决了,仍是挺好的。