高手,您好:
我是一名学习软件工程的学生,现在,我在做我的第一个作品:
“一个自己设计的CS结构聊天系统”:
已经写了近3W行代码了...
我是自己设计的这个作品:
C端0:优秀教师客户端.
C端0:学生客户端.
S端:学校运营商服务端.
D端:开发者运营商服务器.
首先D端运行,S端运行,连接D端.
然后C端运行,连接S端,进行账户验证,再连接D端,进行“授权期限”的检查....
如果C端通过了S端的“有这个人”的验证后,再通过D端的“授权期内”的验证后,就可以得到“整个系统功能的使用”了.....
现在,我运行了D端,S端后,点击了这个按钮:
出现了弟我的MyEclipse中出现的界面...:
因为是“第一个完整的Java作品”,弟我在调试运行时错误的技术上,还不是很有经验...
求高手指导:
这个错误页面,应该以什么思路,什么修改流程,什么修改步骤,来进行上面的错误的排查...
并且,如果弟我希望能够在CS结构聊天系统的运行时错误的排查能力之上,快速拥有调试的熟练能力的话...
弟我应该看什么资料,学习什么资源,什么教材,能够“快速拥有这个能力”...
希望高手能够解决弟我的(图二)中的问题....
谢谢高手的过目!!
一百分奉上!!
一位日日夜夜向着理想奔跑的筑梦者
2013年9月12日星期四下午18点55分调试javamyeclipse聊天学习经验
我是一名学习软件工程的学生,现在,我在做我的第一个作品:
“一个自己设计的CS结构聊天系统”:
已经写了近3W行代码了...
我是自己设计的这个作品:
C端0:优秀教师客户端.
C端0:学生客户端.
S端:学校运营商服务端.
D端:开发者运营商服务器.
首先D端运行,S端运行,连接D端.
然后C端运行,连接S端,进行账户验证,再连接D端,进行“授权期限”的检查....
如果C端通过了S端的“有这个人”的验证后,再通过D端的“授权期内”的验证后,就可以得到“整个系统功能的使用”了.....
现在,我运行了D端,S端后,点击了这个按钮:
出现了弟我的MyEclipse中出现的界面...:
因为是“第一个完整的Java作品”,弟我在调试运行时错误的技术上,还不是很有经验...
求高手指导:
这个错误页面,应该以什么思路,什么修改流程,什么修改步骤,来进行上面的错误的排查...
并且,如果弟我希望能够在CS结构聊天系统的运行时错误的排查能力之上,快速拥有调试的熟练能力的话...
弟我应该看什么资料,学习什么资源,什么教材,能够“快速拥有这个能力”...
希望高手能够解决弟我的(图二)中的问题....
谢谢高手的过目!!
一百分奉上!!
一位日日夜夜向着理想奔跑的筑梦者
2013年9月12日星期四下午18点55分调试javamyeclipse聊天学习经验
估计是静态变量初始化顺序错误,代码贴出来看看
现在的“CS系统的好友列表”这个UI,是:
能够让用户点击之后,与远程的服务器进行相关数据交互的“动态的”Java程序...
这里,弟我再进行相关功能的开发时,采用了“前台用一个线程展示自己的用户UI”“后台用一个类文件进行S端的用户在线数据的接收”,但是,得到了上面的“空指针异常”的错误结果:
(由于弟我想采用“前台创建出用户UI进行好友列表的展示”,在“后台进行对应S端数据的接收”,让S端的数据,"能够交给一个已经创建好的对象",从而,弟我将创建前台与后台接收数据的类,"并发运行的"类文件"MathTeacher类"进行了在"接收数据之前"的书写...
于是...
由于“所创建的MathTeacher类文件没有得到自己的展位上的数据”“出现了空指针异常”的错误...
希望高手能够点拨:
腾讯的工程师,是怎样让自己的好友列表UI,“既能够与主线程的程序相互并发”“又能够让自己的UI,"即时更新自己的用户在线数据"”?
采用Java语言,怎样才能够将这里的问题.解决...?
顺溜哥,弟我的MyJButton2的代码如下:
package c_port_packageDoctor;import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;import javax.swing.JButton;public class MyJButton2 extends JButton {
boolean isMyUser = false;
DataOutputStream dops0 = null;
DataOutputStream dops1 = null;
DataInputStream dips0 = null;
DataInputStream dips1 = null;
String MySysNum = null;
public static String MyUID = null;
public static String MyPWD = null;
String str2 = null;
public static String str3 = null;
String str4 = null;
Login log = null;
public static Socket so3 = null;
public static Socket so2 = null;
/**
*
*/
private static final long serialVersionUID = 1L; /**
* @param args
*/
public MyJButton2(String button, String UID, String pwd, Login log_in) {
super(button);
MyUID = UID;
MyPWD = pwd;
InetAddress addr = null;
try {
addr = InetAddress.getLocalHost();
} catch (UnknownHostException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
str3=addr.getHostAddress().toString();//获得本机IP
log = log_in;
System.out.println("" + log.toString());
this.addActionListener(new ActionListener() { @Override
public void actionPerformed(ActionEvent et) { boolean isOurMember = false;
try {
so2 = new Socket(Recv.D_PORT_SERVER, 8888);
so3 = new Socket(Recv.S_PORT_SERVER,9999);
dops0 = new DataOutputStream(so3.getOutputStream());
dips0 = new DataInputStream(so3.getInputStream());
dops1 = new DataOutputStream(so2.getOutputStream());
dips1 = new DataInputStream(so2.getInputStream());
System.out.println("so3++++++++"+so3);
dops0.writeUTF("0##"+MyUID + "%%" + MyPWD+"%%"+str3);
dops0.flush();
dops0.close();
isOurMember = dips0.readBoolean();
if(isOurMember){
dops1.writeUTF("9##"+String.valueOf(Recv.MySystemserialnum));
boolean islegality = dips1.readBoolean();
if(islegality){
new Recv(so3);
JProgressBar1 obj = new JProgressBar1();
Thread thread1 = new Thread(obj,"MyThread1");
thread1.start();
}
else{
new PayForMyCopyRigth(so2);
System.exit(0);
}
}else{
new C_port_registerfuct(so2);
System.exit(0);
}
}catch(Exception e){
e.printStackTrace();
}
}
});
}
}
顺溜哥,上面的类文件,所担负的职责是:
“进行第一幅图片中的"登录按钮"点击后”的逻辑...
希望顺溜哥,随时吩咐弟我贴图...
今天晚上,弟我能够“干到明天早晨”!!
后台的“接收数据的Recv类”如下文:
package c_port_packageDoctor; import java.io.DataInputStream;
import java.io.IOException;
import java.net.Socket;public class Recv {
int para = -1;
int sign = 0;
static Socket so3 = null;
String str =null;
String signal = null;
static int nowStringnum = 0;
static int allStringnum = 20494;
static int progressvalue = 0;
static Integer MySystemserialnum = -1;
static String MyOrderNum = null;
static String[] MyJButton0content = new String[200];
static String[] MyJButton0URL = new String[200];
static String[] MyJButton0doctor_ficia = new String[200];
static String buffer = null;
static int[] MyJButton0SystempriKey = new int[200];
static int[] MyJButton0doctoronline = new int[200];
static int[] MyJButton0complicatingnum = new int[200];
static int[] doctoronline = new int[200];
static String myCustomercaseHistoryPath = "D:\\MyDoc\\Mywork\\MyCustomerData.txt";
static String MyFriendIP = null;
static String D_PORT_SERVER = "127.0.0.1";
static String S_PORT_SERVER = "127.0.0.1";
static String C_PORT_CLIENT = "127.0.0.1";
static String PayAuthorizeUrl = "";
static ChatClientFriendlist obj0 = new ChatClientFriendlist();
static MathTeacher obj1 = new MathTeacher();
static SQA_enterprise obj2 = new SQA_enterprise();
static Psychological_gas_station obj3 = new Psychological_gas_station();
static EnglishTeacher obj4 = new EnglishTeacher();
static ChineseTeacher obj5 = new ChineseTeacher();
static Advertisement obj6 = new Advertisement();
static final Thread thread0 = new Thread(obj0,"MyThread0");
static final Thread thread1 = new Thread(obj1,"MyThread1");
static final Thread thread2 = new Thread(obj2,"MyThread2");
static final Thread thread3 = new Thread(obj3,"MyThread3");
static final Thread thread4 = new Thread(obj4,"MyThread4");
static final Thread thread5 = new Thread(obj5,"MyThread5");
static final Thread thread6 = new Thread(obj6,"MyThread6");
static String caseHistoryPath = "E:\\Audio\\44100CustomercaseHistoryAccessdoctor\\2.wav";
static String ComplainAccessPath = "E:\\Audio\\44100CustomerComplainAccessdoctor\\2.wav";
static String FileAccessPath = "E:\\Audio\\44100FileAccessdoctor\\2.wav";
static String InfoAccessPath = "E:\\Audio\\44100InfoAccessdoctor\\2.wav";
static String IPAccessPath = "E:\\Audio\\44100IPAccessdoctor\\2.wav";
static String doctorExit = "E:\\Audio\\44100doctorExit\\2.wav";
static String doctorFileRecvOver = "E:\\Audio\\44100doctorFileRecvOver\\2.wav";
static String doctorLogin = "E:\\Audio\\44100doctorLogin\\2.wav";
static String OrderNumAccessdoctor = "E:\\Audio\\44100OrderNumAccessdoctor";
public Recv(Socket s3){
so3 = s3;
}
public void receiveTheData(){
try {
DataInputStream dips1 = new DataInputStream(so3.getInputStream());
while(true){
String buffertemp = dips1.readUTF();
String[] bufferData = buffertemp.split("[##]");
sign = Integer.parseInt(bufferData[0]);
para = Integer.parseInt(bufferData[1]);
buffer = bufferData[2];
switch(sign){
case 1://接收D端的数据,让C端的客户端刷新自己的广告展板。
{
ManageC_port_MDSpara0Channel_Thread m0 = new ManageC_port_MDSpara0Channel_Thread(buffer,para);
str = str + buffer;
nowStringnum = nowStringnum + str.length();
progressvalue = nowStringnum/allStringnum*100;
m0.start();
}
case 2://接收S端的数据,让C端的客户端将好友的消息进行接收.
{
ManageC_portRecv_chatwordChannel1 m1 = new ManageC_portRecv_chatwordChannel1(buffer,so3);
m1.start();
PlaySysAudio.Play(InfoAccessPath);
}
case 3://
{
MySystemserialnum = para;
}
case 4://接收S端传至C端的好友IP地址。
{
MyFriendIP = buffer;
PlaySysAudio.Play(IPAccessPath);
}
case 5://接收D端传至C端的“是否库中有本用户名”并且“提交注册账户合法”“需要等待系统认证时间”的提示。
{
if(buffer.equals("true")){
C_port_registerfuct.jL8.setText("恭喜!!该用户名可以注册!!请您将余下的数据填写完整,点击\"提交\"按钮");
}
if(buffer.equals("false")){
C_port_registerfuct.jL8.setText("对不起!!您填写的用户名在本服务器中已经存在同名账户,请您更换一个用户名,重新提交...");
}
}
case 6://接收S端传至C端的单号。
{
MyOrderNum = buffer;
PlaySysAudio.Play(OrderNumAccessdoctor);
}
case 7:
{
new NoteUserTheChargeOfAuthorize(so3);
}
case 8:
{
signal = buffer;
if(signal.equals("invalid")){
PayForMyCopyRigth.jL.setText("对不起!!本授权码已经失效!!请您到宏福校区后勤集团杨老师处购买3毛钱一天的产品授权,30天起!!");
}else if(signal.equals("OKay!!OurCustomer!!")){
PayForMyCopyRigth.jL.setText("谢谢您的惠顾!!本系统的员工,将竭诚为我们的客户,送上最满意的服务!!请您重新启动本产品!!");
}else{
PayForMyCopyRigth.jL.setText("对不起!!本授权码非法!!请重新检查您的输入!!或者请您到宏福校区后勤集团杨楠老师处购买3毛钱一天的产品授权,30天起!!");
}
}
case 9:
{
ManageTheCustomercaseHistoryRecv m9 = new ManageTheCustomercaseHistoryRecv(buffer,para,so3);
m9.start();
}
case 10:
ManageGetTheS_port_PayForTheSysFuctionSignal m10 = new ManageGetTheS_port_PayForTheSysFuctionSignal(para,buffer);
m10.start();
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
顺溜哥!!
谢谢您的相助!!
希望您能够告诉弟我:
您的信箱...
弟我希望能够在今后,经常得到顺溜哥的提点.
我也能够在“顺溜哥需要的时候”,贡献自己的力量..
D_PORT_SERVER还没完成初始化