個人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環境比較特殊吧。
問題解決了,仍是挺好的。