1. 程式人生 > >錯誤: 找不到或無法載入主類 -java(7)

錯誤: 找不到或無法載入主類 -java(7)

問題描述

最近在做java程式時,在java檔案所在目錄下執行javac可以生成class檔案,但是繼續執行java命令提示錯誤: 找不到或無法載入主類.
問題截圖

這是javac命令成功運行了,包為javanet, 其中有兩個java檔案Server.javaClient.java
執行java命令,則一直報錯

解決方案

  • javac:此命令為java編譯命令,執行是預設在當前路徑下找.java檔案。所以上述情況下執行成功了
  • java:此命令為java執行命令.預設先尋找java檔案的package,然後尋找對應class.如果java原始檔中沒有包名,則是尋找當前目錄下的class檔案。如果二者均沒有找到,轉去尋找classpath。

以本情況為例

我的Server.java檔案為

package javanet;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static void main(String args[]) {
        String[] answer = {"在算錯的情況下", "狗就能生狗", "電視麵包沙發"};
        ServerSocket serverForClicent = null;
        Socket socketOnServer = null;
        DataOutputStream out = null;
        DataInputStream in = null;
        try {
            serverForClicent = new ServerSocket(2010);
        } catch (Exception e) {
            System.out.println(e);
        }
        try {
            System.out.println("等待客戶");
            socketOnServer = serverForClicent.accept();
            out = new DataOutputStream(socketOnServer.getOutputStream());
            in = new DataInputStream(socketOnServer.getInputStream());
            for (int i=0;i<answer.length;i++) {
                String s = in.readUTF();
                System.out.println("伺服器收到的客戶提問"+s);
                out.writeUTF(answer[i]);
                Thread.sleep(500);
            }
        } catch (Exception e) {
            System.out.println("客戶已斷開");
        }
    }
}

存在包名package javanet;,就需要把目錄切換到javanet同級目錄上執行java命令,而當我把package javanet;刪掉後,就在class檔案所在目錄執行即可。
刪掉之前在與javanet同級目錄下執行java javanet/Server

刪掉之後,重新編譯執行