cmd錯誤: 找不到或無法載入主類
阿新 • • 發佈:2021-01-10
背景:程式可以在eclipse中正常執行,但在cmd下無法執行
錯誤: 找不到或無法載入主類
解決方法1
直接註釋掉(或刪除)package語句:
//package training; import java.util.ArrayList; public class ch6_1 { public static void main(String[] args) { ArrayList<String> list = new ArrayList<String>(); list.add("我"); list.add("一定"); list.add("不會輸"); list.add("!!!"); for(String str : list) { System.out.print(str); } System.out.println("\n元素個數:" + list.size()); System.out.println("第3個元素是:" + list.get(2)); } }
再次編譯並執行(注意一定要再次用javac進行編譯,因為原始檔有改動——註釋/刪除了package語句):
原理:
當前工作路徑(即class檔案所在資料夾路徑)為C:\Users\Android\eclipse-workspace\Java Basis\src\training,由於package語句(包名為training)的存在,所以Java執行工具(即java.exe)實際上會在當前工作路徑下再找一個training資料夾(即與package同名的包檔案),然後在此training資料夾中搜尋class檔案。然而當前工作路徑下並沒有另一個training資料夾,就更別說在此資料夾下尋找class檔案了。所以註釋(或刪除)package語句後,Java執行工具會直接在當前工作路徑下尋找class檔案,那就沒毛病了(而不會搜尋一個不存在的資料夾,然後在此資料夾下搜尋class檔案)
解決方法2
方法1其實存在問題,雖然在cmd下能成功執行,但是原始檔在eclipse中會報錯:
這讓人很不舒服,所以還有一種辦法,不用註釋(或刪除)package語句也能在cmd下執行。這需要利用方法1提供的思路,也就是做出與註釋掉package語句等價的行為——編譯檔案後返回上一級路徑(命令:cd..)再執行(但是注意類名前面要加上包名,即java training.ch6_1):