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

📄 welcome.java

📁 自己写的
💻 JAVA
字号:

import javax.swing.JPanel;
import java.awt.Graphics;
import java.net.Socket;
import java.awt.Color;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.awt.image.BufferedImage;
import java.awt.Dimension;
import java.awt.event.MouseEvent;
import java.awt.event.MouseWheelEvent;
import java.io.Serializable;

public class Welcome extends JPanel implements Runnable{
	
	private Socket client;
	private String host;
	private int port;
	private ObjectInputStream input;
	private ObjectOutputStream output;
	private boolean isRuning = true;
	//判断连接
	private boolean isConnected = false;
	private BufferedImage image;
	private int pw = 1024;
	private int ph = 768;
	
	public Welcome(String host,String port){
		this.host = host;
		this.setPreferredSize(new Dimension(1024,768));
		this.enableEvents(MouseEvent.MOUSE_EVENT_MASK);
		this.enableEvents(MouseEvent.MOUSE_MOTION_EVENT_MASK);
		this.enableEvents(MouseEvent.MOUSE_WHEEL_EVENT_MASK);
		try{
			this.port = Integer.parseInt(port);
			isConnected = connect();
			if(isConnected){
				new Thread(this).start();
				isConnected = false;
			}
			else
				this.cancel();
		}
		catch(Exception e){
			this.cancel();
		}
	}
		
	public boolean connect(){
		try{
			client = new Socket(host,port);
		}
		catch(Exception e){
			return false;
		}
		return true;
	}
	
	public void noconnection(Graphics g){
		g.setColor(Color.BLACK);
		g.fillRect(0,0,this.getWidth(),this.getHeight());
		g.setColor(Color.RED);
		g.drawString("没有接收到任何图象",this.getWidth()/2,this.getHeight()/2);
		g.setColor(Color.BLACK);
	}
	
	public void paintComponent(Graphics g){
		
		if(isRuning == false)
			noconnection(g);
		else if(isConnected){
			g.drawImage(image, 0, 0, pw, ph, null);
		}
		else{
			noconnection(g);
		}
	}
	
	public void readImage(BufferedImage image,int[] str){
		
		int count=4;
		System.out.println(str[0]+" "+str[1]+" "+str[2]+" "+str[3]);
		for(int y=str[1];y<=str[3];y++)
			for(int x=str[0];x<=str[2];x++){
				image.setRGB(x,y,str[count]);
				count = count+1;
			}
	}
	public void run(){
		
		isConnected = true;
		try{
			input = new ObjectInputStream(client.getInputStream());
			output = new ObjectOutputStream(client.getOutputStream());
			image = new BufferedImage(pw,ph,BufferedImage.TYPE_INT_RGB);
			while(isRuning){
				//读数据
				System.out.println("ok");
				int[] index = (int[])input.readObject();
				System.out.println("长度:"+index.length);
				this.readImage(image,index);
				repaint();
				for(int i=0;i<10;i++)
					System.gc();
				Thread.sleep(100);
			}
		}
		catch(Exception e){
			System.out.println("异常:"+e.toString());
			e.printStackTrace();
			this.cancel();
		}
		
	}
	
	public void cancel(){
		try{
			isRuning = false;
			repaint();
			if(input != null)
				input.close();
			if(client != null)
				client.close();
		}catch(Exception e){
			System.exit(0);
		}
	}
	
	protected void processMouseEvent(MouseEvent e){
		
        switch(e.getID()){
        	//鼠标单击事件
        case 500:
        	produse(500,e.getModifiers(),e.getX(),e.getY());
            break;
        }
	}
	
	public void produse(int action,int mode,int x,int y){
		int[] str = {action,mode,x,y};
		writeOrder(str);
	}
	
	private void writeOrder(int[] key){
        try{
        	output.writeObject(key);
        	output.flush();
        }
        catch(Exception exception){
        	this.cancel();
        }
    }
}

⌨️ 快捷键说明

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