首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AWS EC2 java运行错误:找不到或加载主类

AWS EC2 java运行错误:找不到或加载主类
EN

Stack Overflow用户
提问于 2022-09-12 05:17:35
回答 3查看 55关注 0票数 0

我是AWS EC2的新手,我希望通过执行如下所示的MyServer脚本在EC2实例中运行java类MyServer

代码语言:javascript
复制
#!/bin/sh
cd /home/ec2-user/
java MyServer

MyServer.java

代码语言:javascript
复制
package server;
import java.io.*;
import java.net.*;
import java.util.ArrayList;
import java.util.Random;

public class MyServer {
    public static void main(String[] args) throws IOException {
        String jokes[] = {"j1", "j2", "j3"};

        ServerSocket socket = new ServerSocket(9000);
        while(true){
            Socket s = socket.accept();
            PrintWriter print = new PrintWriter(s.getOutputStream(), true);
            String ip = (InetAddress.getLocalHost().getHostAddress());
            print.println(ip+jokes[(int)(Math.random()*(jokes.length-1))]);
            s.close();
            print.close();
        }
    }
}

我通过安装编译器yum install java-develjavac MyServer.java来编译代码。

实例的当前工作目录是/home/ec2-user,该文件夹中有MyServer.classrun.sh

在实例中执行sh run.sh时,我收到了Error: Could not find or load main class MyServer Caused by: java.lang.NoClassDefFoundError: server/MyServer (wrong name: MyServer)

我试图通过在.sh脚本中使用不同的类名(即server.MyServerMyServer.class )来解决这个问题,但它们都不起作用。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-09-13 10:35:18

从代码中删除package server;之后,它就可以工作了。包似乎是由java自动添加的。

票数 0
EN

Stack Overflow用户

发布于 2022-09-12 05:57:12

将shell脚本更改为如下所示:

代码语言:javascript
复制
#!/bin/sh


(cd /home/ec2-user/ && java MyServer)

否则,当shell解释器到达java MyServer时,当前目录已更改回原来的当前目录。

票数 0
EN

Stack Overflow用户

发布于 2022-09-12 06:09:08

问题是,您有一个名为服务器的包,并且在bash脚本中忽略了它。检查/home/ec2-user/是否有服务器文件夹。如果编译成功,那么它将拥有它。接下来,使用java server.MyClass修改脚本,而不输入服务器文件夹(包),您将能够成功地执行它。

我已经能够在本地系统上执行此代码:

代码语言:javascript
复制
package server;
import java.io.*;
import java.net.*;
import java.util.ArrayList;
import java.util.Random;

public class MyServer {
    public static void main(String[] args) throws IOException {
        String jokes[] = {"j1", "j2", "j3"};

        System.out.println("Server Started!");

        ServerSocket socket = new ServerSocket(9000);
        while(true){
            Socket s = socket.accept();
            PrintWriter print = new PrintWriter(s.getOutputStream(), true);
            String ip = (InetAddress.getLocalHost().getHostAddress());
            print.println(ip+jokes[(int)(Math.random()*(jokes.length-1))]);
            s.close();
            print.close();
        }
    }
}

这是编译和运行的shell代码:

代码语言:javascript
复制
saad@saadsap:~/java_barebone$ javac server/* -d out/
saad@saadsap:~/java_barebone$ cd out/
saad@saadsap:~/java_barebone/out$ java server.MyServer 
Server Started!

注意:标志-d用于目标文件夹,可以省略。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73684760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档