问题描述
最近在做java程序时,在java文件所在目录下执行javac可以生成class文件,但是继续执行java命令提示错误: 找不到或无法加载主类
.
问题截图
这是javac命令成功运行了,包为javanet
, 其中有两个java文件Server.java
和Client.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
删掉之后,重新编译执行