Exception in thread "main" java.lang.NoClassDefFoundError: UDP_Receive (wrong na me: com/ray/net/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; 后,就都正常了。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏逸鹏说道

C# 实现发送手机短信

现在很多网站都是短信发送的功能,怎么实现的呢。对于个人站长来说的话,通过使用SMS短信通API接口相对比较划算和简单。那怎么实现呢,步骤如下: 1. 从网上(h...

1.1K40
来自专栏Android开发指南

2.下拉刷新、二维码

37170
来自专栏后台开发+音视频+ffmpeg

dpvs源码分析(续)

在上一篇https://cloud.tencent.com/developer/article/1180256?s=original-sharing,我们已经介...

53510
来自专栏跟着阿笨一起玩NET

C# http Get/POST请求封装类

http://www.sufeinet.com/thread-3-1-1.html

82420
来自专栏Java学习之路

JavaTCP和UDP套接字编程

原文地址:http://www.cnblogs.com/MindMrWang/p/8919890.html 在我们刚开始入门Java后端的时候可能你会觉得有点...

34950
来自专栏Java学习之路

JavaTCP和UDP套接字编程

原文地址:http://www.cnblogs.com/MindMrWang/p/8919890.html 在我们刚开始入门Java后端的时候可能你会觉得有点...

11520
来自专栏MasiMaro 的技术博文

WinSock 重叠IO模型

title: WinSock 重叠IO模型 tags: [WinSock 模型, 网络编程, 重叠IO模型] date: 2018-06-29 20:26:...

18320
来自专栏菩提树下的杨过

jQuery扩展以及gzip压缩测试

<!doctype html> <html> <head> <meta http-equiv="content-type" content="text/h...

29450
来自专栏专注 Java 基础分享

Java--JDBC连接数据库(二)

     本篇文章接着上篇文章,还剩下一个知识点是,可滚动的结果接集和可更新的结果集。一般默认情况之下,多结果集是不可以显式滚动,移动选择的。如果想要做到,需要...

21460
来自专栏Android 研究

Android Handler机制6之MessageQueue简介

我们知道MessageQueue就一个构造函数 代码在MessageQueue.java 68行

12720

扫码关注云+社区

领取腾讯云代金券