java 怎么调用返回值

duxd1989 2014-02-15 10:42:52
可能问的问题比较白痴 但是google 一下没有找到相关的资料讲解 忘懂的大侠们结合我的代码讲解下 下面是代码

package cn.edu.usst;

import java.net.*;

public class UDPServer {
private static final int PORT = 50000;
private DatagramSocket dataSocket;
private DatagramPacket dataPacket;
private byte receiveByte[];
public String receiveStr;

//public UDPServer() {
// Init();
//}

public String Init() {
try {
dataSocket = new DatagramSocket(PORT);
receiveByte = new byte[1024];
dataPacket = new DatagramPacket(receiveByte, receiveByte.length);
receiveStr = "";
int i = 0;
while (i == 0)// 无数据,则循环

{
dataSocket.receive(dataPacket);
i = dataPacket.getLength();

// 接收数据
System.out.println("正在接收数据。。。。。。");
if (i > 0) {
// 指定接收到数据的长度,可使接收数据正常显示,开始时很容易忽略这一点

receiveStr = new String(receiveByte, 0, dataPacket.getLength());
System.out.println(receiveStr);
i = 0;// 循环接收

}

}
}
catch (Exception e) {
e.printStackTrace();
//System.out.println("2");
}
finally{
if (dataSocket != null ){
dataSocket.close();
//System.out.println("3");
}
}
return receiveStr;// 返回值,在主函数中等待调用
}


}

package cn.edu.usst;

public class NavigationSystem{
public static void main(String args[]) {
UDPServer udpserver = new UDPServer();
udpserver.Init();
//System.out.println("gpsdata" + UDPServer.receiveStr );
System.out.println("gpsdata" + udpserver.Init() );
}
}

我的主要目的是在主函数当中打印返回值receiveStr 然后做数据解析的工作 可是现在不能调用
...全文
890 18 打赏 收藏 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
nmyangym 2014-02-16
  • 打赏
  • 举报
回复
引用 13 楼 duxd1989 的回复:
[quote=引用 11 楼 nmyangym 的回复:] 你的程序没有返回条件,Init()一直运行,return 语句执行不到。 楼主用udpserver.receiveStr不就得到了吗?主程序里也循环,不断取udpserver.receiveStr并处理。
Init()这里就进入死循环了 请问主程序里面怎么循环 根本跳不去来啊 [/quote] 用线程实现吧。
duxd1989 2014-02-16
  • 打赏
  • 举报
回复
引用 6 楼 zuoziji_lj 的回复:
[quote=引用 5 楼 duxd1989 的回复:] [quote=引用 3 楼 zuoziji_lj 的回复:] [quote=引用 2 楼 duxd1989 的回复:] [quote=引用 1 楼 zuoziji_lj 的回复:] 直接在main中写
String str = udpserver.Init();
就行了 你这句是什么意思?“<span style="color: #FF0000;">return receiveStr;</span>”
谢谢你这么快回复,我代码
System.out.println("gpsdata" + udpserver.Init() );
和你说的
String str = udpserver.Init();System.out.println("gpsdata" + str );
效果不是一样的吗 “<span style="color: #FF0000;">return receiveStr;</span>” 本来是想高亮显示 结果不行 我重新编辑了[/quote]那你想怎么调用返回值?[/quote] 我知道问题出在哪了 不是调用的问题 是我循环采集数据 这样返回值不行[/quote]你还不如一次性把你的需求说完[/quote]我想取出通过循环得到的数据 为下一步解析用 不知道怎么解觉 有什么思路
duxd1989 2014-02-16
  • 打赏
  • 举报
回复
引用 12 楼 u013652613 的回复:
[quote=引用 11 楼 nmyangym 的回复:] 你的程序没有返回条件,Init()一直运行,return 语句执行不到。 楼主用udpserver.receiveStr不就得到了吗?主程序里也循环,不断取udpserver.receiveStr并处理。
这里貌似进入死循环了
while (i == 0)// 无数据,则循环               {                 dataSocket.receive(dataPacket);                 i = dataPacket.getLength();                                   // 接收数据                 System.out.println("正在接收数据。。。。。。");                 if (i > 0) {                     // 指定接收到数据的长度,可使接收数据正常显示,开始时很容易忽略这一点                       receiveStr = new String(receiveByte, 0, dataPacket.getLength());                     System.out.println(receiveStr);                     i = 0;// 循环接收                   }                               } 
[/quote]有什么解决方案吗
duxd1989 2014-02-16
  • 打赏
  • 举报
回复
引用 11 楼 nmyangym 的回复:
你的程序没有返回条件,Init()一直运行,return 语句执行不到。 楼主用udpserver.receiveStr不就得到了吗?主程序里也循环,不断取udpserver.receiveStr并处理。
Init()这里就进入死循环了 请问主程序里面怎么循环 根本跳不去来啊
nmyangym 2014-02-16
  • 打赏
  • 举报
回复
这是个模拟发送数据的代码。

import java.net.*;

public class SendByDatapocket {
	public SendByDatapocket() throws Exception    {
        DatagramSocket clientsocket = new DatagramSocket();
        String str = "hello world";
        //DatagramPacket packet = new DatagramPacket(str.getBytes(),
        //        str.length(), InetAddress.getByName("localhost"), 3000);
       

        int i = 0;
        while(i++ < 100){
        	try {
        		Thread.sleep(100);
        	}
        	catch(InterruptedException ie){
        		ie.printStackTrace();
        	}
        	
            DatagramPacket packet = new DatagramPacket((str + " " + i + ":").getBytes(),
            		(str + " " + i + ":").length(), InetAddress.getByName("localhost"), 50000);

            clientsocket.send(packet);
        	
        }
         clientsocket.close();
    }

	public static void main(String[] args) throws Exception {
		new SendByDatapocket();
	}
}
nmyangym 2014-02-16
  • 打赏
  • 举报
回复
我模拟了一下,可以的。 楼主可根据思路,细化实现。 参考代码:

public class NavigationSystem{
    public static void main(String args[]) {
        UDPServer udpserver = new UDPServer();
        Thread t = new Thread(udpserver);//----------------创建并启动线程。
        t.start();
        String old = "";
        String newString = "";
        while(true) {//---------------------循环接收数据,如果为空并且不重复,显示。
        	newString = udpserver.getReceiveStr();
        	if( null != newString && !old.equals(newString)) {
        		 System.out.println("gpsdata" + newString );
        		 old = newString;
        	}
        }
    }
}

import java.net.*;

public class UDPServer implements Runnable{//---------------实现runnable 接口。
	private static final int PORT = 50000;
	private DatagramSocket dataSocket;
	private DatagramPacket dataPacket;
	private byte receiveByte[];
	private String receiveStr;//-----------------参数私有

	// public UDPServer() {
	// Init();
	// }

	
	public String getReceiveStr() {//--------------公共读方法
		return receiveStr;
	}

	public void run() {//-----------------------init 方法改为run 方法。
		try {
			dataSocket = new DatagramSocket(PORT);
			receiveByte = new byte[1024];
			dataPacket = new DatagramPacket(receiveByte, receiveByte.length);
			receiveStr = "";
			int i = 0;
			while (i == 0) {// 无数据,则循环	
				dataSocket.receive(dataPacket);
				i = dataPacket.getLength();

				// 接收数据
				System.out.println("正在接收数据。。。。。。");
				if (i > 0) {
					// 指定接收到数据的长度,可使接收数据正常显示,开始时很容易忽略这一点

					receiveStr = new String(receiveByte, 0,
							dataPacket.getLength());
					System.out.println(receiveStr);
					i = 0;// 循环接收
				}//end if
			}//end while
		} catch (Exception e) {
			e.printStackTrace();
			// System.out.println("2");
		} finally {
			if (dataSocket != null) {
				dataSocket.close();
				// System.out.println("3");
			}
		}
	}
}
卡卡吉利 2014-02-15
  • 打赏
  • 举报
回复
引用 2 楼 duxd1989 的回复:
[quote=引用 1 楼 zuoziji_lj 的回复:] 直接在main中写
String str = udpserver.Init();
就行了 你这句是什么意思?“<span style="color: #FF0000;">return receiveStr;</span>”
谢谢你这么快回复,我代码
System.out.println("gpsdata" + udpserver.Init() );
和你说的
String str = udpserver.Init();System.out.println("gpsdata" + str );
效果不是一样的吗 “<span style="color: #FF0000;">return receiveStr;</span>” 本来是想高亮显示 结果不行 我重新编辑了[/quote]那你想怎么调用返回值?
duxd1989 2014-02-15
  • 打赏
  • 举报
回复
引用 1 楼 zuoziji_lj 的回复:
直接在main中写
String str = udpserver.Init();
就行了 你这句是什么意思?“<span style="color: #FF0000;">return receiveStr;</span>”
谢谢你这么快回复,我代码
System.out.println("gpsdata" + udpserver.Init() );
和你说的
String str = udpserver.Init();System.out.println("gpsdata" + str );
效果不是一样的吗 “<span style="color: #FF0000;">return receiveStr;</span>” 本来是想高亮显示 结果不行 我重新编辑了
卡卡吉利 2014-02-15
  • 打赏
  • 举报
回复
直接在main中写
String str = udpserver.Init();
就行了 你这句是什么意思?“<span style="color: #FF0000;">return receiveStr;</span>”
灰太狼A代 2014-02-15
  • 打赏
  • 举报
回复
引用 11 楼 nmyangym 的回复:
你的程序没有返回条件,Init()一直运行,return 语句执行不到。 楼主用udpserver.receiveStr不就得到了吗?主程序里也循环,不断取udpserver.receiveStr并处理。
这里貌似进入死循环了
while (i == 0)// 无数据,则循环               {                 dataSocket.receive(dataPacket);                 i = dataPacket.getLength();                                   // 接收数据                 System.out.println("正在接收数据。。。。。。");                 if (i > 0) {                     // 指定接收到数据的长度,可使接收数据正常显示,开始时很容易忽略这一点                       receiveStr = new String(receiveByte, 0, dataPacket.getLength());                     System.out.println(receiveStr);                     i = 0;// 循环接收                   }                               } 
nmyangym 2014-02-15
  • 打赏
  • 举报
回复
你的程序没有返回条件,Init()一直运行,return 语句执行不到。 楼主用udpserver.receiveStr不就得到了吗?主程序里也循环,不断取udpserver.receiveStr并处理。
duxd1989 2014-02-15
  • 打赏
  • 举报
回复
引用 7 楼 dongzeviva 的回复:
本来很明白,但是看不懂你说的什么
也是在你给我回复后才发现的 还得谢谢你
receiveStr = new String(receiveByte, 0, dataPacket.getLength());
这是通过while循环接收的GPS定位信息(也就说数据无限的) 我怎样返回这个信息 为下一步解析用 有什么比较好的思路
duxd1989 2014-02-15
  • 打赏
  • 举报
回复
[/quote]你还不如一次性把你的需求说完[/quote] 也是在你给我回复后才发现的 还得谢谢你
receiveStr = new String(receiveByte, 0, dataPacket.getLength());
这是通过while循环接收的GPS定位信息(也就说数据无限的) 我怎样返回这个信息 为下一步解析用 有什么比较好的思路
duxd1989 2014-02-15
  • 打赏
  • 举报
回复
也是在你给我回复后才发现的 还得谢谢你
receiveStr = new String(receiveByte, 0, dataPacket.getLength());
这是通过while循环接收的GPS定位信息(也就说数据无限的) 我怎样返回这个信息 为下一步解析用 有什么比较好的思路
  • 打赏
  • 举报
回复
本来很明白,但是看不懂你说的什么
卡卡吉利 2014-02-15
  • 打赏
  • 举报
回复
引用 5 楼 duxd1989 的回复:
[quote=引用 3 楼 zuoziji_lj 的回复:] [quote=引用 2 楼 duxd1989 的回复:] [quote=引用 1 楼 zuoziji_lj 的回复:] 直接在main中写
String str = udpserver.Init();
就行了 你这句是什么意思?“<span style="color: #FF0000;">return receiveStr;</span>”
谢谢你这么快回复,我代码
System.out.println("gpsdata" + udpserver.Init() );
和你说的
String str = udpserver.Init();System.out.println("gpsdata" + str );
效果不是一样的吗 “<span style="color: #FF0000;">return receiveStr;</span>” 本来是想高亮显示 结果不行 我重新编辑了[/quote]那你想怎么调用返回值?[/quote] 我知道问题出在哪了 不是调用的问题 是我循环采集数据 这样返回值不行[/quote]你还不如一次性把你的需求说完
duxd1989 2014-02-15
  • 打赏
  • 举报
回复
引用 3 楼 zuoziji_lj 的回复:
[quote=引用 2 楼 duxd1989 的回复:] [quote=引用 1 楼 zuoziji_lj 的回复:] 直接在main中写
String str = udpserver.Init();
就行了 你这句是什么意思?“<span style="color: #FF0000;">return receiveStr;</span>”
谢谢你这么快回复,我代码
System.out.println("gpsdata" + udpserver.Init() );
和你说的
String str = udpserver.Init();System.out.println("gpsdata" + str );
效果不是一样的吗 “<span style="color: #FF0000;">return receiveStr;</span>” 本来是想高亮显示 结果不行 我重新编辑了[/quote]那你想怎么调用返回值?[/quote] 我知道问题出在哪了 不是调用的问题 是我循环采集数据 这样返回值不行

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧