我的问题如下: 我有一个java代码,用一个.java文件编写 - Chain_of_Responsibility,代码在我的问题的最后。 我用Linux编译它
javac Chain_of_Responsibility.java
将所有.class文件放在同一目录中。然后我尝试用
运行我的程序java Chain_of_Responsibility
获取“线程中的异常”主“java.lang.NoClassDefFoundError:Chain_of_Responsibility”。我试着让我的main函数静态,在不同的.java文件中编写所有类,但没有成功。所以我不知道该怎么做。你能救我吗?
package COR;
public class Chain_of_Responsibility
{
public void main(String[] args)
{
//Create the Chain of Responsibility
Handler chain = build_chain();
//Trying to handle the request (valid are cheese, meet or banana)
chain.handle_request(args[1]);
}
private Handler build_chain()
{
//Creating the chain
Handler monkey = new Monkey();
Handler wolve = new Wolve();
Handler mouse = new Mouse();
//First nide is Monkey, then Wolve and then Mouse
monkey.set_next_handler(wolve);
wolve.set_next_handler(mouse);
//Returning the first node in the chain
return monkey;
}
}
abstract class Handler
{
Handler next_handler;
public void set_next_handler(Handler next_handler)
{
//Setting next handler in the chain
this.next_handler = next_handler;
}
public abstract void handle_request(String request);
}
class Mouse extends Handler
{
public void handle_request(String request)
{
//Trying to handle the request
if (request == "cheese")
{
//Succesful try
System.out.println("Mouse handles cheese!");
}
else
{
//Cannot handle request
System.out.println("Mouse in unable to handle cheese" + request + "!");
if (next_handler != null)
{
//Sending request to the next handler
next_handler.handle_request(request);
}
else
{
//If there is no handlers left, alert about crash
System.out.println("Chain ends without success!");
}
}
}
}
class Wolve extends Handler
{
public void handle_request(String request)
{
//Trying to handle the request
if (request == "meet")
{
//Succesful try
System.out.println("Wolve handles meet!");
}
else
{
//Cannot handle request
System.out.println("Wolve in unable to handle cheese" + request + "!");
if (next_handler != null)
{
//Sending request to the next handler
next_handler.handle_request(request);
}
else
{
//If there is no handlers left, alert about crash
System.out.println("Chain ends without success!");
}
}
}
}
class Monkey extends Handler
{
public void handle_request(String request)
{
//Trying to handle the request
if (request == "banana")
{
//Succesful try
System.out.println("Monkey handles banana!");
}
else
{
//Cannot handle request
System.out.println("Monkey in unable to handle" + request + "!");
if (next_handler != null)
{
//Sending request to the next handler
next_handler.handle_request(request);
}
else
{
//If there is no handlers left, alert about crash
System.out.println("Chain ends without success!");
}
}
}
}
答案 0 :(得分:6)
尝试java COR.Chain_Of_Responsibility
并制作main
方法static
修改强>
您必须在项目的根目录中启动java...
,例如如果您的Chain_of_responsibiliy.java位于/src
/src/COR
答案 1 :(得分:0)
首先,确保您的目录结构与您的包结构相匹配。这意味着,由于您的类位于名为COR
的包中,因此源文件应位于名为COR
的目录中。
因此,假设您的项目位于C:\MyProject
,您应该有一个名为C:\MyProject\COR
的目录,其中包含源文件Chain_of_Responsibility.java
。
然后从目录C:\MyProject
编译并运行它:
C:\MyProject> javac COR\Chain_of_Responsibility.java
C:\MyProject> java COR.Chain_of_Responsibility
注意:javac
命令需要源文件的路径; java
命令需要一个完全限定的类名(而不是类文件的路径)。
如果上述方法不起作用,那么您很可能设置了CLASSPATH
环境变量。您可以通过使用-cp
选项显式指定类路径来覆盖它:
C:\MyProject> java -cp . COR.Chain_of_Responsibility
(此外,您的main
方法必须为static
,正如其他人已经注意到的那样。)