Exception in thread "main" java.lang.NoClassDefFoundError: UDP_Receive (wrong na me: com/ray/net/UDP_Receive)

简介: 一.事件经过     今晚学习java网络编程,在eclipse中写了两个个java文件,一个发送端UDP_Send2.java,一个接收端UDP_Receive.java。实现发送端键盘录入信息,通过UDP传输方式将数据发送出去,接接收端再接受数据的功能。

一.事件经过

    今晚学习java网络编程,在eclipse中写了两个个java文件,一个发送端UDP_Send2.java,一个接收端UDP_Receive.java。实现发送端键盘录入信息,通过UDP传输方式将数据发送出去,接接收端再接受数据的功能。

    源码如下:

   1.UDP_Send2.java

package com.ray.net;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

/*
 * 键盘录入
 * 
 * 需求:通过UDP传输方式,将一段文字数据发送出去。
 * 定义一个udp发送端。
 * 思路:
 *      1.建立udpsocket服务。
 *      2.提供数据,并将数据封装到数据包中。
 *      3.通过socket服务的发送功能,将数据包发送出去。
 *      4.关闭资源。
 */
public class UDP_Send2 {

    public static void main(String[] args) throws Exception{
        // TODO Auto-generated method stub
        
        DatagramSocket ds=new DatagramSocket();
        
        //键盘录入
        BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
        
        String line=null;
        
        while((line=bufr.readLine())!=null){
            if("886".equals(line))  break;
            
            byte[] buf=line.getBytes();
            DatagramPacket dp=
                new DatagramPacket(buf, buf.length, InetAddress.getByName("192.168.31.190"), 10001); 

            ds.send(dp);
        }
 
        ds.close();
    }

}

2.UDP_Receive.java

package com.ray.net;

import java.net.DatagramPacket;
import java.net.DatagramSocket;

/*
 * 需求: 定义一个应用程序,用于接收udp协议传输的数据并处理的。
 * 
 * 思路: 
 *       1.定义udpSocket服务。通常会监听一个端口。其实就是给这个就收网络应用程序定义数字标识。
 *       2.定义数据包,用于存储接收的数据。
 *       3.通过socket服务的receive方法,将接收到的数据存入数据包中。
 *       4.通过数据包的方法获取其中的数据。
 *       5.关闭资源
 * 
 */
public class UDP_Receive {

    public static void main(String[] args) throws Exception{
        
        //1.创建udp socket, 建立端点,设置监听端口。
        DatagramSocket ds=new DatagramSocket(10001);
        
        while(true){   //由于ds.receive(dp)方法是阻塞式。
        //2.定义数据包,用于存储数据。
        byte[] buf=new byte[1024];
        DatagramPacket dp=new DatagramPacket(buf,buf.length);
        
        //3.通过服务的receive方法,将接收到的数据存入数据包中。
        //ds.receive(dp)方法是阻塞式方法,线程运行到此处,便停止。没数据就等,有数据接收数据。
        ds.receive(dp);                                   
        
        //4.通过数据包的方法获取其中的数据。
        String ip=dp.getAddress().getHostAddress();
        String data=new String(dp.getData(),0,dp.getLength());
        int port=dp.getPort();
        System.out.println(ip+"::"+data+"::"+port);
        }
        //5.关闭资源
        //ds.close();
        
        
        
        
        
        
    }
}
        
        

 

     由于UDP_Send2.java实现了键盘录入功能,而在elclipse中运行之后不能调出给你输入的地方。因此我拷贝了这两个文件到了 E:\Maijor_win7\JAVA\example\NET 目录下。

调用cmd,编译成功,然后执行命令:java  UDP_Receive。却报出了

Exception in thread "main" java.lang.NoClassDefFoundError: UDP_Receive (wrong na me: com/ray/net/UDP_Receive)

 

二.异常信息

Exception in thread "main" java.lang.NoClassDefFoundError: UDP_Receive (wrong na
me: com/ray/net/UDP_Receive)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:14
2)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
        at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)

 

 

三.解决方案

1.异常发生的原因:

    NoClassDefFoundError异常是 java虚拟机在编译时能找到合适的类,但是运行时在Java的classpath路径中却不能找到合适的类 导致的。

    而 Exception in thread "main" java.lang.NoClassDefFoundError: UDP_Receive (wrong name: com/ray/net/UDP_Receive),这句话的意思是  main线程出了异常,找不到这个类:UDP_Receive(错误的名字:com/ray/net/UDP_Receive)。

    这两个java文件所在目录为:E:\Maijor_win7\JAVA\example\NET,看到这里,立马就知道是包名冲突了。

2.解决异常

     删掉这两个java文件中的 package com.ray.net; 后,就都正常了。

 

目录
相关文章
|
6月前
|
数据采集 自然语言处理 Java
Playwright 多语言一体化——Python/Java/.NET 全栈采集实战
本文以反面教材形式,剖析了在使用 Playwright 爬取懂车帝车友圈问答数据时常见的配置错误(如未设置代理、Cookie 和 User-Agent),并提供了 Python、Java 和 .NET 三种语言的修复代码示例。通过错误示例 → 问题剖析 → 修复过程 → 总结教训的完整流程,帮助读者掌握如何正确配置爬虫代理及其它必要参数,避免 IP 封禁和反爬检测,实现高效数据采集与分析。
329 3
Playwright 多语言一体化——Python/Java/.NET 全栈采集实战
|
7月前
|
数据采集 自然语言处理 JavaScript
Playwright多语言生态:跨Python/Java/.NET的统一采集方案
随着数据采集需求的增加,传统爬虫工具如Selenium、Jsoup等因语言割裂、JS渲染困难及代理兼容性差等问题,难以满足现代网站抓取需求。微软推出的Playwright框架,凭借多语言支持(Python/Java/.NET/Node.js)、统一API接口和优异的JS兼容性,解决了跨语言协作、动态页面解析和身份伪装等痛点。其性能优于Selenium与Puppeteer,在学术数据库(如Scopus)抓取中表现出色。行业应用广泛,涵盖高校科研、大型数据公司及AI初创团队,助力构建高效稳定的爬虫系统。
367 2
Playwright多语言生态:跨Python/Java/.NET的统一采集方案
|
Java 编译器 Maven
Java“class file contains wrong class”解决
当Java程序运行时出现“class file contains wrong class”错误,通常是因为类文件与预期的类名不匹配。解决方法包括:1. 确保类名和文件名一致;2. 清理并重新编译项目;3. 检查包声明是否正确。
329 3
|
Java 网络安全 Maven
Exception in thread "main" java.lang.NoSuchMethodError: okhttp3.OkHttpClient$Builder.sslSocketFactory(Ljavax/net/ssl/SSLSocketFactory;Ljavax/net/ssl/X509TrustManager;)Lokhttp3/OkHttpClient$Builder; 问题处理
【10月更文挑战第26天】Exception in thread "main" java.lang.NoSuchMethodError: okhttp3.OkHttpClient$Builder.sslSocketFactory(Ljavax/net/ssl/SSLSocketFactory;Ljavax/net/ssl/X509TrustManager;)Lokhttp3/OkHttpClient$Builder; 问题处理
497 2
|
Java Apache Maven
Java/Spring项目的包开头为什么是com?
本文介绍了 Maven 项目的初始结构,并详细解释了 Java 包命名惯例中的域名反转规则。通过域名反转(如 `com.example`),可以确保包名的唯一性,避免命名冲突,提高代码的可读性和逻辑分层。文章还讨论了域名反转的好处,包括避免命名冲突、全球唯一性、提高代码可读性和逻辑分层。最后,作者提出了一个关于包名的问题,引发读者思考。
857 0
Java/Spring项目的包开头为什么是com?
|
JavaScript 安全 Java
谈谈UDP、HTTP、SSL、TLS协议在java中的实际应用
下面我将详细介绍UDP、HTTP、SSL、TLS协议及其工作原理,并提供Java代码示例(由于Deno是一个基于Node.js的运行时,Java代码无法直接在Deno中运行,但可以通过理解Java示例来类比Deno中的实现)。
231 1
java网络编程 UDP通信协议实现局域网内文件的发送和接收
java网络编程 UDP通信协议实现局域网内文件的发送和接收
199 1
java网络编程 UDP通信协议实现局域网内文件的发送和接收
|
算法 Java 测试技术
java 访问ingress https报错javax.net.ssl.SSLHandshakeException: Received fatal alert: protocol_version
java 访问ingress https报错javax.net.ssl.SSLHandshakeException: Received fatal alert: protocol_version
1829 1
|
开发框架 安全 Java
.net和java有什么样的区别?
Java和.NET在本质、编程语言、生态系统与工具、跨平台性、应用领域、性能与效率以及安全性与可靠性等方面都存在明显的区别。选择哪个平台取决于具体的需求、技术栈和目标平台。
931 7
|
Java 开发工具 Spring
【Azure Spring Cloud】使用azure-spring-boot-starter-storage来上传文件报错: java.net.UnknownHostException: xxxxxxxx.blob.core.windows.net: Name or service not known
【Azure Spring Cloud】使用azure-spring-boot-starter-storage来上传文件报错: java.net.UnknownHostException: xxxxxxxx.blob.core.windows.net: Name or service not known
159 0