⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jicq.java

📁 类似QQ一个用java开发出来的聊天工具
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
package test.jicq;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import java.util.*;
import java.awt.image.*;
import java.applet.*;
import sun.audio.*;

public class jICQ extends Applet   //jICQ网络即时通信系统
{
    static String icqNo = ""; //用户名
    static String ver = "ver(c):1.4.0329";//jICQ版本号
    static boolean logonOK = false, exitSystem = false;
    static String URLstring = "jicq.vicp.net";
    static String[] host =
        { "jicq.vicq.net", "javaicq.vicp.net", "jicq.ip88.net" };
    static int CONTMAX = 300;
    static boolean isApplet = false, isRunning = false;
    static String codeBase = null;
    static Image[][] head, alphaHead;
    static Image upImage = null,
        downImage = null,
        addImage = null,
        modifyImage = null;
    static Image m0Image = null,
        m1Image = null,
        m2Image = null,
        m3Image = null,
        smsgImage = null,
        dialogImage = null;
    static Image mailImage = null,
        icqImage = null,
        logImage = null,
        seekImage = null,
        jicqImage = null;
    static LogonFrame lf = null;
    Thread mainFrame = null;//主线程
    String state = "";
    static AudioClip msgAC = null, sMsgAC = null;
    static String msgAudioPath = "image/msg.au",
        sMsgAudioPath = "image/smsg.au";

    public jICQ()
    {
    }

    public static void main(String args[])//主程序
    {
        /*		Socket socket=null;
        		for(int i=0;i<host.length;i++){
        			//System.out.println("   host[i]:"+host[i]);
        			try{socket=new Socket(host[i],7802);}catch(Exception e){}
        			if(socket!=null){URLstring=host[i];i=host.length+1;}
        		}
        */
        if (args.length > 0)
            if (args[0] != null && !args[0].equals(""))
                URLstring = args[0];
        System.out.println("Starting jICQ...\nThe server is:" + URLstring);
        jICQ j = new jICQ();
        j.getDiskFile();//查找源文件
        j.logon();//登录
    }
    private void logon()//登录
    {
        lf = new LogonFrame();//登录界面设计
        while (!logonOK)
        {
            try
            {
                Thread.sleep(100);
            }
            catch (Exception e)
            {
            }
        }
        mainFrame = new Thread(new MainFrame(icqNo));
        mainFrame.start();
        logonOK = false; //if applet in brower refushed,then must relogon
    }
    public static void setID(String s)//发送ID号
    {
        icqNo = s;
        logonOK = true;
    }
    public static String getver()//得到版本号
    {
        return ver;
    }
    public void init()//初始化
    {
        isApplet = true;
        exitSystem = true;
        state = "正在初始化...";
        repaint();
        codeBase = getDocumentBase().toString();
        head = new Image[31][2];
        alphaHead = new Image[31][2];
        for (int i = 0; i <= 30; i++)
            try
            {
                head[i][0] =
                    getImage(getDocumentBase(), "image/" + i + "-0.gif");
                alphaHead[i][0] = alpha(head[i][0]);
                head[i][1] =
                    getImage(getDocumentBase(), "image/" + i + "-1.gif");
                alphaHead[i][1] = alpha(head[i][1]);
            }
            catch (Exception e)
            {
                System.out.println("   jICQ.init() read picture error:" + e);
            }
        upImage = getImage(getDocumentBase(), "image/up.gif");
        downImage = getImage(getDocumentBase(), "image/down.gif");
        mailImage = getImage(getDocumentBase(), "image/mail.gif");
        icqImage = getImage(getDocumentBase(), "image/icq.gif");
        logImage = getImage(getDocumentBase(), "image/log.gif");
        seekImage = getImage(getDocumentBase(), "image/seek.jpg");
        jicqImage = getImage(getDocumentBase(), "image/jicq.jpg");
        addImage = getImage(getDocumentBase(), "image/add.gif");
        modifyImage = getImage(getDocumentBase(), "image/modify.gif");
        m0Image = getImage(getDocumentBase(), "image/m0.gif");
        m1Image = getImage(getDocumentBase(), "image/m1.gif");
        m2Image = getImage(getDocumentBase(), "image/m2.gif");
        m3Image = getImage(getDocumentBase(), "image/m3.gif");
        smsgImage = getImage(getDocumentBase(), "image/smsg.gif");
        dialogImage = getImage(getDocumentBase(), "image/dialog.gif");

        msgAC = getAudioClip(getDocumentBase(), msgAudioPath);
        sMsgAC = getAudioClip(getDocumentBase(), sMsgAudioPath);
        audioPlay(1);
    }
    public void start()
    {
        state = "运行中...";
        repaint();
        if (isRunning == false)
        {
            isRunning = true;
            logon();
        }
    }
    public void stop()
    {
        exitSystem = true;
        state = "已退出。";
        repaint();
    }
    public void destory()
    {
        stop();
    }
    private void getDiskFile()//查找源文件
    {
        head = new Image[31][2];
        alphaHead = new Image[31][2];
        Frame f = new Frame();
        for (int i = 0; i <= 30; i++)
            try
            {
                head[i][0] = f.getToolkit().getImage("image/" + i + "-0.gif");
                alphaHead[i][0] = alpha(head[i][0]);
                head[i][1] = f.getToolkit().getImage("image/" + i + "-1.gif");
                alphaHead[i][1] = alpha(head[i][1]);
            }
            catch (Exception e)
            {
                System.out.println("   jICQ.jICQ() read picture error:" + e);
            }
        try
        {
            upImage = f.getToolkit().getImage("image/up.gif");
            downImage = f.getToolkit().getImage("image/down.gif");
            mailImage = getToolkit().getImage("image/mail.gif");
            icqImage = getToolkit().getImage("image/icq.gif");
            logImage = getToolkit().getImage("image/log.gif");
            seekImage = getToolkit().getImage("image/seek.jpg");
            jicqImage = getToolkit().getImage("image/jicq.jpg");
            addImage = getToolkit().getImage("image/add.gif");
            modifyImage = getToolkit().getImage("image/modify.gif");
            m0Image = getToolkit().getImage("image/m0.gif");
            m1Image = getToolkit().getImage("image/m1.gif");
            m2Image = getToolkit().getImage("image/m2.gif");
            m3Image = getToolkit().getImage("image/m3.gif");
            smsgImage = getToolkit().getImage("image/smsg.gif");
            dialogImage = getToolkit().getImage("image/dialog.gif");

        }
        catch (Exception e)
        {
            System.out.println(
                "   MainFrame.MainFrame() read picture error:" + e);
        }
    }
    public void paint(Graphics g)
    {
        getGraphics().drawImage(icqImage, 0, 0, this);
        getGraphics().drawString(state, 50, 30);
    }
    private Image alpha(Image inImg)
    {
        Image outImg = null;
        try
        {
            MediaTracker mt;
            mt = new MediaTracker(this);
            mt.addImage(inImg, 1);
            mt.waitForID(1); // 等待所有图片的数据都被正确载入  
            if (inImg == null)
                return null;
            int imgw = inImg.getWidth(this);
            int imgh = inImg.getHeight(this);

            //System.out.println("  w,h="+imgw+","+imgh);
            int deepHead[] = new int[imgw * imgh];
            PixelGrabber pg =
                new PixelGrabber(inImg, 0, 0, imgw, imgh, deepHead, 0, imgw);
            pg.grabPixels();
            int r, g, b, light = 80;
            for (int i = 0; i < imgw * imgh; i++)
            {
                r = deepHead[i] >> 16 & 0xff;
                r += light;
                if (r > 0xff)
                    r = 0xff;
                g = deepHead[i] >> 8 & 0xff;
                g += light;
                if (g > 0xff)
                    g = 0xff;
                b = deepHead[i] & 0xff;
                b += light;
                if (b > 0xff)
                    b = 0xff;
                deepHead[i] =
                    deepHead[i] & 0xff000000 | (r << 16) | (g << 8) | b;
            } //把所有的象素的Alpha值

            outImg =
                createImage(
                    new MemoryImageSource(imgw, imgh, deepHead, 0, imgw));
            //生成前景图象
            mt.addImage(outImg, 2);
            mt.waitForID(2);
        }
        catch (Exception e)
        {
            outImg = null;
        }
        return outImg;
    }
    public static void audioPlay(int mode)
    {
        String path = null;

        try
        {
            //System.out.println("   is Applet:"+isApplet);
            if (isApplet)
            {
                if (mode == 1)
                    msgAC.play();
                if (mode == 2)
                    sMsgAC.play();
            }
            else
            {
                if (mode == 1)
                    path = msgAudioPath;
                if (mode == 2)
                    path = sMsgAudioPath;
                InputStream in = new FileInputStream(path);
                AudioStream as = new AudioStream(in);
                AudioPlayer.player.start(as);
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}

class MainFrame extends Frame implements Runnable//通信工具主界面
{
    static Hashtable friend;
    static boolean friendBusy = false;
    static String friends = "", onlineFriends = "";
    static boolean repaintEvt = false,
        duplogon = false,
        NEWMSG = false,
        icqShowing = false;
    static Vector message;
    static IcqID myIcqID = null;
    static int UDPrPort = 7900;
    static long lastShowTime = 0;
    static int[][] area;
    static int currentarea = 0, pastarea = 0;
    static String mis[] =
        {
            "收/发信息 R/S (F4)",
            "删除此人 Delete",
            "详细资料 Info",
            "刷新 Refrush",
            "-",
            "大图标 Big icon",
            "小图标 small icon",
            "添加好友 Append" };
    static String modifymis[] = { "修改个人资料 pID", "修改系统信息 sInfo" };
    static boolean LOGED = false, canSend = false;

    static HttpImage httpimage = null;
    static SysInfo sysinfo = null;
    static int menuItemIndex = 0;
    DatagramSocket udpRSocket = null;
    PopupMenu pm, modifyPM;
    IcqID currenticqid = null;
    String joinedIcqNo = null;
    Result result = null;
    Seek seek = null;
    Sender sender = null;
    Dialog dialog = null;
    SubmitID submitid = null;
    Dialog diaFrame = null;
    Sender onlineMon = null;
    MyDialog mydialog = null;
    RMsg rmsg = null;

    MainFrame(String icqNo)
    {
        try
        {
            enableEvents(AWTEvent.WINDOW_EVENT_MASK);
            enableEvents(AWTEvent.MOUSE_EVENT_MASK);
            enableEvents(AWTEvent.KEY_EVENT_MASK);
            enableEvents(AWTEvent.MOUSE_MOTION_EVENT_MASK);

            repaintEvt = false;
            duplogon = false;
            NEWMSG = false;
            icqShowing = false;
            LOGED = false;
            jICQ.exitSystem = false;
            canSend = false;
            myIcqID = new IcqID();
            myIcqID.icqNo = icqNo;
            message = new Vector();
            friend = new Hashtable();
            result = new Result();
            sysinfo = new SysInfo();
            setTitle(icqNo);
            setIconImage(jICQ.icqImage);
            buildPopupMenu();
            setBounds(SysInfo.xposition, SysInfo.yposition, 100, 500);
            httpimage = new HttpImage();
            httpimage.start();
            setVisible(true);
        }
        catch (Exception e)
        {
            System.out.println("  MainFrame.MainFrame() error:" + e);
            close();
        }
    }
    public void run()
    {
        System.out.println("   begin connect... ");
        if (!jICQ.isApplet)
        {
            for (;(UDPrPort < 65535) && (udpRSocket == null); UDPrPort++)
                try
                {
                    udpRSocket = new DatagramSocket(UDPrPort);
                }
                catch (Exception e)
                {
                }
            UDPrPort--;
            if (udpRSocket == null)
            {
                jICQ.exitSystem = true;
                exitMsg("不能建立UDP接收端口。");
                return;
            }
            rmsg = new RMsg(udpRSocket, myIcqID);
            rmsg.start();
        }

        String onlineCmd = null, onlineCmd2 = null;
        try
        {

            String randomId = new Integer(new Random().nextInt()).toString();
            onlineCmd = "ONLINEMON icqNo:" + myIcqID.icqNo + " id:" + randomId;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -