2014-11-09 215 views
2

我以前做的java类:错误:无法找到或加载主类主要

package com.server.main; 

import java.io.PrintWriter; 
import java.net.ServerSocket; 
import java.net.Socket; 

public class Main { 
    public static void main(String args[]) throws Exception{ 
     ServerSocket server = new ServerSocket(12345); 
     Socket client = server.accept(); 
     PrintWriter writer = new PrintWriter(client.getOutputStream()); 
     writer.write("Hello from server"); 
    } 
} 

现在我试图编译并运行它。我做的是:

javac Main.java 

没关系,生产了Main.class

现在,根据该post,我试图运行该程序:

java -cp C:\Users\workspace\Tests\src\com\server\main Main 
java -cp C:\Users\workspace\Tests\src\com\server\main Main.class 
java -cp . Main 
java -cp . Main.class 

所有这些产生输出:

Error: Could not find or load main class Main 

有什么不对?

+0

您需要将上述三个目录放在您现在的位置,然后运行'java com.server.main.Main',因为软件包的名称是该类名称的一部分。您还需要获得基本的Java书籍或在线教程。 – 2014-11-09 06:04:07

+0

@DavidWallace正好。 Tahnk你 – user3663882 2014-11-09 06:06:09

+0

你可以把它作为答案吗? – user3663882 2014-11-09 06:07:13

回答

1

Main是在一个包,我相信你需要

java -cp C:\Users\workspace\Tests\src com.server.main.Main 

您也可能会移动到你的项目的顶层文件夹,并使用.

cd C:\Users\workspace\Tests\src 
java -cp . com.server.main.Main 

最后,可以将该文件夹添加到您的CLASSPATH

set CLASSPATH=C:\Users\workspace\Tests\src 
java com.server.main.Main 
+0

这是核心的事情是使用完全合格的类名...我不知道这一点。 – user3663882 2014-11-09 08:41:19

1

您需要从软件包目录上的一个级别引用您正在使用的软件包。所以在这里你的包被com.server.main这意味着你的目录结构:

src/ 
    com/ 
     server/ 
      main/ 
       Main.java 
       Main.class 

你不一定需要在src目录(这是我们使用的原因-cp或-classpath选项),给以下命令

用途:

java -cp C:\Users\workspace\Tests\src com.server.main.Main 
相关问题