文章目录

  • 前言
  • 一、准备工作
  • 二、代码
    • 1.客户机
    • 2.服务器

前言

主要功能:
类似于腾讯会议。
客户机获取电脑摄像头拍的照片(视频)实时发给服务器。再两端的界面同时显示。客户机上还可以画图,并发给服务器,保存在两端的图形队列中,每次在照片显示后画出队列中的所有图形。

主要思路:
先写一个本地画板,实现画线、圆,并使用cv库获取图片。在写一个网络类,把发送的线、圆、图片的方法封装在里面。并使用Socket在网络类对象里创建一个网络连接。最后再写一个服务器。再实际过程中,并不是先把客户机写完再写服务器。而是两边各先写一个画直线的方法测试一下。一步一步来。

不足之处:
图片发送是先转为二维int数组,在使用writeInt()发送,传输效率不佳,可以尝试一下系统提供的图片IO.


一、准备工作

下载cv库(帮助获取电脑默认相机的开源库)。网址:http://webcam-capture.sarxos.pl/
然后在编译器中导入这三个文件。(解压后在libs文件夹中)

二、代码

1.客户机

客户机主程序代码如下:

package webDrawClient0127;import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;public class DrawBoard extends JFrame {/*** */private static final long serialVersionUID = 1L;// 图形数组public Shape[] shapeArray;// 主函数public static void main(String[] args) {DrawBoard lu = new DrawBoard();lu.initUI();}// 设置窗口public void initUI() {// 设置窗口// JFrame drawBoard = new JFrame();this.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);this.setSize(800, 600);this.setTitle("drawBoard");// 设置置顶this.setAlwaysOnTop(true);// 位置this.setLocation(200, 100);// 流式布局java.awt.FlowLayout flow = new java.awt.FlowLayout();this.setLayout(flow);// 设置可见this.setVisible(true);// 画笔Graphics gr = this.getGraphics();// 画板监听器DrawMouse mouse = new DrawMouse(gr);//图像数组this.shapeArray = mouse.shapeArray;//监听器线程启动mouse.start();this.addMouseListener(mouse);this.addMouseMotionListener(mouse);// 边数按钮//// 空白// javax.swing.JLabel kb=new javax.swing.JLabel("");// java.awt.Dimension dm4 = new java.awt.Dimension(this.getWidth(),// this.getHeight());// kb.setPreferredSize(dm4);// this.add(kb);// 按钮1javax.swing.JButton jbu = new javax.swing.JButton("三角形");jbu.setContentAreaFilled(false);this.add(jbu);jbu.addActionListener(mouse);jbu.setBorderPainted(false);// 按钮2javax.swing.JButton jbu2 = new javax.swing.JButton("四边形");jbu2.setContentAreaFilled(false);this.add(jbu2);jbu2.addActionListener(mouse);jbu2.setBorderPainted(false);// 按钮3javax.swing.JButton jbu3 = new javax.swing.JButton("五边形");jbu3.setContentAreaFilled(false);this.add(jbu3);jbu3.addActionListener(mouse);jbu3.setBorderPainted(false);// 按钮\\\\\圆javax.swing.JButton jbuy = new javax.swing.JButton("圆");jbuy.setContentAreaFilled(false);this.add(jbuy);jbuy.addActionListener(mouse);jbuy.setBorderPainted(false);// 按钮矩形javax.swing.JButton jbus = new javax.swing.JButton("矩形");jbus.setContentAreaFilled(false);this.add(jbus);jbus.addActionListener(mouse);jbus.setBorderPainted(false);// 按钮铅笔javax.swing.JButton jbuq = new javax.swing.JButton("铅笔");jbuq.setContentAreaFilled(false);this.add(jbuq);jbuq.addActionListener(mouse);jbuq.setBorderPainted(false);// 颜色1javax.swing.JButton jbu4 = new javax.swing.JButton("颜色1");// jbu4.setContentAreaFilled (false);this.add(jbu4);jbu4.addActionListener(mouse);jbu4.setBorderPainted(false);jbu4.setBackground(Color.BLUE);// 颜色2javax.swing.JButton jbu5 = new javax.swing.JButton("颜色2");// jbu5.setContentAreaFilled (false);this.add(jbu5);jbu5.addActionListener(mouse);jbu5.setBorderPainted(false);jbu5.setBackground(Color.PINK);// 颜色3javax.swing.JButton jbu6 = new javax.swing.JButton("颜色3");// jbu6.setContentAreaFilled (false);this.add(jbu6);jbu6.addActionListener(mouse);jbu6.setBorderPainted(false);jbu6.setBackground(Color.yellow);// 重置javax.swing.JButton re = new javax.swing.JButton("重置");re.setContentAreaFilled(false);this.add(re);re.addActionListener(mouse);re.setBorderPainted(false);}// 重绘图形public void paint(Graphics g) {super.paint(g);
//      ImageIcon imgIcon = new ImageIcon("D:\\临时\\3img.jpeg");
//      //得到Image对象。
//      Image img = imgIcon.getImage();
//      ImageObserver observer = null;
//      g.drawImage(img, 0, 65, this.getWidth(), this.getHeight(), observer);if(null!=shapeArray) {for (int i = 0; i < shapeArray.length; i++) {Shape shp = shapeArray[i];if (shp != null) {shp.redraw(g, this.getWidth(), this.getHeight());}}}}
}

鼠标监听器:

package webDrawClient0127;import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Iterator;import com.github.sarxos.webcam.Webcam;public class DrawMouse extends Thread implements MouseListener, ActionListener, MouseMotionListener {// 参数// 图形数组public Shape[] shapeArray = new Shape[10000];private int index = 0;// 画笔private Graphics gra;// 坐标private int x1, x2, y1, y2;private Point start, end;// 多边形边数private static int n = 0;// 已画边数记录private static int m = 0;// 按钮名字private String x;// 铅笔控制变量private int k = 0;// 保存初始坐标private int x0;private int y0;// 矩形第一次或第二次点击private int x12 = 1;// 静态颜色,初始为BLUEpublic static Color color = Color.BLUE;// 网络模块Netcon net;// 构造器,传画笔,设置网络public DrawMouse(Graphics gr) {super();gra = gr;net = new Netcon(8888);}// 传送图像// 获得画笔// 设置背景public void backimage() {//      ImageIcon imgIcon = new ImageIcon("D:\\临时\\3img.jpeg");
//      //得到Image对象。
//      Image img = imgIcon.getImage();
//      ImageObserver observer = null;
//      gra.drawImage(img, 0, 65, 2000, 1080, observer);}// 画矩形private void drawsq() {if (x12 == 1) {x1 = x2;y1 = y2;x12 = 2;} else {int x = (x1 + x2 - Math.abs(x1 - x2)) / 2;int y = (y1 + y2 - Math.abs(y1 - y2)) / 2;int w = Math.abs(x1 - x2);int h = Math.abs(y1 - y2);gra.setColor(color);gra.drawRect(x, y, w, h);x12 = 1;Shape sp = new Shape(this.x, color, x, y, w, h);shapeArray[index++] = sp;net.sendsq(color, x, y, w, h);}}// 画圆private void drawy() {if (x12 == 1) {x1 = x2;y1 = y2;x12 = 2;} else {int x = (x1 + x2 - Math.abs(x1 - x2)) / 2;int y = (y1 + y2 - Math.abs(y1 - y2)) / 2;int w = Math.abs(x1 - x2);int h = Math.abs(y1 - y2);// 画圆gra.setColor(color);gra.fillOval(x, y, w, h);x12 = 1;// 存入队列Shape sp = new Shape(this.x, color, x, y, w, h);shapeArray[index++] = sp;// 发送圆net.sendOvil(color, x, y, w, h);}}// 画多边形private void draws() {if (m == 1) {x0 = x2;y0 = y2;x1 = x2;y1 = y2;} else {gra.setColor(color);gra.drawLine(x1, y1, x2, y2);// 发送线坐标net.sendline(color, x1, y1, x2, y2);Shape sp = new Shape("点线", color, x1, y1, x2, y2);shapeArray[index++] = sp;x1 = x2;y1 = y2;if (m == n) {m = 0;// 停一下画最后一条线try {Thread.sleep(300);} catch (Exception ef) {}gra.setColor(color);net.sendline(color, x1, y1, x2, y2);gra.drawLine(x0, y0, x2, y2);Shape spe = new Shape("点线", color, x0, y0, x2, y2);shapeArray[index++] = spe;}}}public void mouseClicked(MouseEvent e) {}public void mouseEntered(MouseEvent e) {}public void mouseExited(MouseEvent e) {}public void mousePressed(MouseEvent e) {}// 鼠标释放时画图public void mouseReleased(MouseEvent e) {// TODO Auto-generated method stubx2 = e.getX();y2 = e.getY();m++;if (n != 0)ms();}// ms();判断画图函数public void ms() {switch (x) {case "三角形":case "四边形":case "五边形":draws();break;case "圆":drawy();break;case "矩形":drawsq();break;}}// 鼠标点击按钮//获得名字//调用选择public void actionPerformed(ActionEvent e) {String t = e.getActionCommand();if (t.equals("颜色1") || t.equals("颜色2") || t.equals("颜色3")) {colorchose(t);} else {x = t;chose();}}// 颜色选择public void colorchose(String x) {if (x.equals("颜色1")) {colorChose(Color.BLUE);}if (x.equals("颜色2")) {colorChose(Color.PINK);}if (x.equals("颜色3")) {colorChose(Color.yellow);}}// 颜色选择private void colorChose(Color co) {color = co;}// 画图初始化public void chose() {if (x.equals("三角形")) {k = 0;n = 3;m = 0;backimage();x12 = 1;}if (x.equals("四边形")) {k = 0;n = 4;m = 0;x12 = 1;backimage();}if (x.equals("五边形")) {k = 0;n = 5;m = 0;x12 = 1;backimage();}if (x.equals("圆")) {k = 0;n = 11;m = 0;x12 = 1;backimage();}if (x.equals("矩形")) {k = 0;n = 12;m = 0;x12 = 1;backimage();}if (x.equals("铅笔")) {k = 1;n = 0;m = 0;x12 = 1;backimage();}if (x.equals("重置")) {n = 0;m = 0;start = null;end = null;x12 = 1;k = 0;x = null;gra.setColor(Color.white);gra.fillRect(0, 65, 2000, 1080);gra.setColor(color);}}// 拖动时调用划线public void mouseDragged(MouseEvent e) {// 判断是否画铅笔if (k != 0) {if (end != null) {start = end;}if (k == 1 || k == 2) {end = new Point(e.getX(), e.getY());k++;}if (k > 2) {end = new Point(e.getX(), e.getY());if (Math.abs(end.x - start.x) < 50) {// 铅笔划线paint();// 发送数据net.sendPaint(color, start.x, start.y, end.x, end.y);}}}}// 铅笔划线public void paint() {gra.setColor(color);gra.drawLine(start.x, start.y, end.x, end.y);Shape sp = new Shape("点线", color, start.x, start.y, end.x, end.y);shapeArray[index++] = sp;System.out.println(index);}// 线程获取图像方法public void run() {Webcam webcam = Webcam.getDefault();if (webcam != null) {webcam.open();while (true) {// 获取摄像头BufferedImage img = webcam.getImage();int w = img.getWidth();int h = img.getHeight();System.out.println("DrawMouse" + "w:" + w + "h:" + h);// 传输图片try {net.sendImg(w, h, img);gra.drawImage(img, 0, 0, 800, 600, null);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}if (null != shapeArray) {for (int i = 0; i < shapeArray.length; i++) {Shape shp = shapeArray[i];if (shp != null) {shp.redraw(gra, 0, 0);}}}try {Thread.sleep(1000);} catch (Exception e) {// TODO: handle exception}}} else {System.out.println("No webcam detected");}}public void mouseMoved(MouseEvent e) {}}

网络模块:

package webDrawClient0127;import java.awt.Color;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.awt.image.RenderedImage;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;import javax.imageio.ImageIO;public class Netcon {/** 铅笔为1 圆为2 矩形为3 多边形为4 图片为5*/// 客户端网络输入输出流java.io.InputStream ins;java.io.OutputStream ous;java.io.DataInputStream dins;java.io.DataOutputStream dous;java.net.Socket client;// 构造器public Netcon(int x) {try {// 连接服务器client = new java.net.Socket("127.0.0.1", x);System.out.println("连结成功~!");// 获取输入输出流ins = client.getInputStream();ous = client.getOutputStream();// 数据输入输出流dins = new DataInputStream(ins);dous = new DataOutputStream(ous);} catch (Exception e) {System.out.println("创建网络失败");}}// 发送铅笔坐标public void sendPaint(Color color, int x1, int y1, int x2, int y2) {try {synchronized (dous) {dous.writeByte(1);// 铅笔为1// 传输颜色if (color == Color.BLUE) {dous.writeByte(1);}if (color == Color.PINK) {dous.writeByte(2);}if (color == Color.yellow) {dous.writeByte(3);}dous.writeInt(x1);dous.writeInt(y1);dous.writeInt(x2);dous.writeInt(y2);}System.out.println("发送1");} catch (IOException e) {e.printStackTrace();}}// 发送圆坐标public void sendOvil(Color color, int x, int y, int w, int h) {try {synchronized (dous) {dous.writeByte(2);// 圆为2// 传输颜色if (color == Color.BLUE) {dous.writeByte(1);}if (color == Color.PINK) {dous.writeByte(2);}if (color == Color.yellow) {dous.writeByte(3);}// 圆心dous.writeInt(x);dous.writeInt(y);// 宽高dous.writeInt(w);dous.writeInt(h);}System.out.println("发送2");} catch (IOException e) {e.printStackTrace();}}// 发送矩形坐标public void sendsq(Color color, int x, int y, int w, int h) {try {synchronized (dous) {dous.writeByte(3);// 矩形为3// 传输颜色if (color == Color.BLUE) {dous.writeByte(1);}if (color == Color.PINK) {dous.writeByte(2);}if (color == Color.yellow) {dous.writeByte(3);}// 圆心dous.writeInt(x);dous.writeInt(y);// 宽高dous.writeInt(w);dous.writeInt(h);}System.out.println("发送3");} catch (IOException e) {e.printStackTrace();}}// 发送多边形坐标public void sendline(Color color, int x1, int y1, int x2, int y2) {try {synchronized (dous) {dous.writeByte(4);// 多边形为4// 传输颜色if (color == Color.BLUE) {dous.writeByte(1);}if (color == Color.PINK) {dous.writeByte(2);}if (color == Color.yellow) {dous.writeByte(3);}dous.writeInt(x1);dous.writeInt(y1);dous.writeInt(x2);dous.writeInt(y2);}System.out.println("发送4");} catch (IOException e) {e.printStackTrace();}}// 发送图片public synchronized void sendImg(int w, int h, BufferedImage img) throws IOException {synchronized (dous) {// 图片为5dous.writeByte(5);// 宽高dous.writeInt(w);dous.writeInt(h);// 图片iomyImageIOwrite(w, h, img, "jpg");}// 刷新// dous.flush();System.out.println("发送5");}private void myImageIOwrite(Integer w, int h, BufferedImage img, String string) throws IOException {int[][] imgs = new int[w][h];for (int i = 0; i < w; i++) {for (int j = 0; j < h; j++) {int n = img.getRGB(i, j);// 那点像素点上color的值imgs[i][j] = n;}}for (int i = 0; i < w; i++) {for (int j = 0; j < h; j++) {int v = imgs[i][j];dous.writeInt(v);}}}public static void main(String[] args) {int m = 123456789;// System.out.println(m>>8);Byte[] by = new Byte[4];for (int i = 0; i < 4; i++) {by[i] = (byte) (m - ((m >> 8) << 8));System.out.println(by[i]);System.out.println(m - ((m >> 8) << 8));System.out.println(m);System.out.println(m >> 8 << 8);m = m >> 8;// System.out.println(m);}// int k=(int)by[0]+((int)by[1])<<8+(int)by[2]<<16+(int)by[3]<<24;int k = ((int) by[0]) + (((int) by[1]) << 8) + ((int) by[2] << 16) + ((int) by[3] << 24);System.out.println(k);}
}

图形类:

package webDrawClient0127;import java.awt.Color;
import java.awt.Graphics;public class Shape {private Color color;private String name;public int x1, y1, wt, ht;
//构造器public Shape(String name, Color color, int x1, int y1, int wt, int ht) {this.name = name;this.color = color;this.x1 = x1;this.y1 = y1;this.wt = wt;this.ht = ht;}
//画图public void redraw(Graphics gr, int x, int y) {switch (name) {case "矩形":gr.setColor(color);gr.drawRect(x1, y1, wt, ht);break;// 65+y1*(y-65)/535case "圆":gr.setColor(color);gr.fillOval(x1, y1, wt, ht);break;case "点线":gr.setColor(color);gr.drawLine(x1, y1, wt, ht);break;}}
}

2.服务器

服务器代码如下:

package webTest0127;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
public class server extends JFrame {/* * */private static final long serialVersionUID = 1L;// 画笔Graphics gr;// 图形保存private Shape[] shapes = new Shape[10000];// 记录个数int index = 0;// 构造器//窗口设置public server() {this.setLocation(1100, 100);this.setSize(800, 600);this.setTitle("webDrawServer");this.setVisible(true);this.setDefaultCloseOperation(3);// 设置置顶this.setAlwaysOnTop(true);gr = this.getGraphics();}// 建立服务器对象//while循环接收public void creatServer(int port) {try {// 建立服务器对象java.net.ServerSocket myss = new java.net.ServerSocket(port);System.out.println("服务器创建成功");// 等待连接System.out.println("等待");java.net.Socket client = myss.accept();System.out.println("连接");// 输入输出流java.io.InputStream ins = client.getInputStream();// java.io.OutputStream ous = client.getOutputStream();// 数据输入输出流java.io.DataInputStream dins = new DataInputStream(ins);//int t = 0;while (t != 30) {int x = dins.readByte();/** 铅笔为1 * 圆为2 * 矩形为3 * 多变形为4 * 图片为5*/if (x == 1){System.out.println("调用:  1");recevPaint(dins);}if (x == 2) {System.out.println("调用:  2");recevy(dins);}if (x == 3) {System.out.println("调用:  3");recevsq(dins);}if (x == 4) {System.out.println("调用:  4");recevLine(dins);}if (x == 5) {System.out.println("调用:  5   图像");recevImg(dins);}reDraw(gr);try {Thread.sleep(30);} catch (Exception e) {// TODO: handle exception}}// 通话结束client.close();} catch (Exception e) {e.printStackTrace();}}//重绘// 重新绘制涂鸦private void reDraw(Graphics gr2) {for (int i = 0; i < index; i++) {Shape sp = shapes[i];sp.redraw(gr2, i, i);}}private void recevLine(DataInputStream dins) {try {// 传输颜色Color color = null;int m = dins.readByte();if (m == 1) {color = Color.BLUE;}if (m == 2) {color = Color.PINK;}if (m == 3) {color = Color.yellow;}int x1 = dins.readInt();int y1 = dins.readInt();int x2 = dins.readInt();int y2 = dins.readInt();gr.setColor(color);gr.drawLine(x1, y1, x2, y2);Shape sp = new Shape("点线", color, x1, y1, x2, y2);shapes[index++] = sp;} catch (IOException e) {e.printStackTrace();}}private void recevsq(DataInputStream dins) {try {// 传输颜色Color color = null;int m = dins.readByte();if (m == 1) {color = Color.BLUE;}if (m == 2) {color = Color.PINK;}if (m == 3) {color = Color.yellow;}int x1 = dins.readInt();int y1 = dins.readInt();int w = dins.readInt();int h = dins.readInt();gr.setColor(color);gr.drawRect(x1, y1, w, h);Shape sp = new Shape("矩形", color, x1, y1, w, h);shapes[index++] = sp;} catch (IOException e) {e.printStackTrace();}}private void recevy(DataInputStream dins) {try {// 传输颜色Color color = null;int m = dins.readByte();if (m == 1) {color = Color.BLUE;}if (m == 2) {color = Color.PINK;}if (m == 3) {color = Color.yellow;}int x1 = dins.readInt();int y1 = dins.readInt();int w = dins.readInt();int h = dins.readInt();gr.setColor(color);gr.fillOval(x1, y1, w, h);Shape sp = new Shape("圆", color, x1, y1, w, h);shapes[index++] = sp;} catch (IOException e) {e.printStackTrace();}}
//public void recevPaint(DataInputStream dins) {try {// 传输颜色Color color = null;int m = dins.readByte();if (m == 1) {color = Color.BLUE;}if (m == 2) {color = Color.PINK;}if (m == 3) {color = Color.yellow;}int x1 = dins.readInt();int y1 = dins.readInt();int x2 = dins.readInt();int y2 = dins.readInt();gr.setColor(color);gr.drawLine(x1, y1, x2, y2);Shape sp = new Shape("点线", color, x1, y1, x2, y2);shapes[index++] = sp;} catch (IOException e) {e.printStackTrace();}}// 图片public synchronized void recevImg(DataInputStream dins) throws IOException {//System.out.println("Server    " + "w:" + w + "    h:" + h);try {//调用ImageIO获得图像BufferedImage img ;img=myImageIOread(dins);System.out.println("Server, w:"+img.getWidth()+ "  h:"+img.getHeight());System.out.println("Server    " + "00000000");//画出图片gr.drawImage(img, 0, 0, 800, 600, null);} catch (Exception e) {System.out.println("Server    " + "读取图片失败");}}private BufferedImage myImageIOread(DataInputStream dins) throws IOException {//读取宽高int w = dins.readInt();int h = dins.readInt();System.out.println("Server, w:"+w+ "  h:"+h);int[][] imgs=new int[w][h];for(int i=0;i<w;i++){for(int j=0;j<h;j++){imgs[i][j]=dins.readInt();}}System.out.println("new  img");BufferedImage img=new BufferedImage(w,h,1);for(int i=0;i<w;i++){for(int j=0;j<h;j++){img.setRGB(i, j, imgs[i][j]);}}return img;}//主函数public static void main(String[] args) {server ss = new server();ss.creatServer(8888);}
}

Java实现的一个简易网络画板相关推荐

  1. Java小程序之简易网络画板

    Java小程序之简易网络画板 一.前言: Java是一门网络编程语言,强大的网络可以让数据进行传送:今天,我们就小试牛刀,看看Java是如何进行网络传输数据的: 二.项目分析: 1.功能需求: 我们前 ...

  2. 简单java socket_基于Java Socket实现一个简易在线聊天功能(一)

    最近做了一个项目,其中有一个在线网页交流的需求,好久没写代码了,手都生疏了,于是先写demo练练手,分享到脚本之家平台,以此做个记录,方便自己和大家使用. 先给大家说下实现步骤分这样几大步: 1.使用 ...

  3. 如何使用 Java AWT 创建一个简易计算器

    本文分享自华为云社区<手把手教你使用 Java AWT 创建一个简易计算器>,作者:海拥 . 关于AWT AWT (抽象窗口工具包)是一个有助于构建 GUI 的 API (图形用户界面)基 ...

  4. c语言实现 网络嗅探程序代码,一个简易网络嗅探器的实现源代码.doc

    一个简易网络嗅探器的实现源代码 摘要:本文介绍一个用C语言和网络数据包分析开发工具实现的简易网络Sniffer. 要害词:网络:数据包:Sniffer 引言 目前,已经有不少的Sniff工具软件,如W ...

  5. 【Android】制作一个简易的画板

    前言 本文介绍使用Canvas.Paint.Path等原生API,实现一个简易的画板. 绘图原理 Paint Paint可以理解为我们现实中的画笔,在使用前我们需要对Paint进行初始化,比如颜色.画 ...

  6. 利用java swing编写一个简易的计算器,实现了括号,优先级,三角函数,阶乘等功能

    利用java swing编写一个简易的计算器 背景 效果图 一.默认图 二.计算三角函数 三.阶乘运算 四.常见的四则运算(实现了优先级) 代码 本文借鉴了"初识Java,实现简易计算器(带 ...

  7. 微信字 签到 java_java微信签到功能实现:java做的一个简易的微信签到系统

    java微信签到功能实现,现在微信签到功能很流行,这个签到功能帮助微信用户更好的管理自己的微信公众号,那你想知道java微信签到功能如何实现呢,今天小编就特意为大家分享一个关于java微信签到功能实现 ...

  8. java设计按月每天签到_java微信签到功能实现:java做的一个简易的微信签到系统的案例...

    java微信签到功能实现,现在微信签到功能很流行,这个签到功能帮助微信用户更好的管理自己的微信公众号,那你想知道java微信签到功能如何实现呢,今天小编就特意为大家分享一个关于java微信签到功能实现 ...

  9. 用java编写一个简易功能画板_用Java语言编写一个简易画板

    讲了三篇概博客的概念,今天,我们来一点实际的东西.我们来探讨一下如何用Java语言,编写一块简易的画图板. 一.需求分析 无论我们使用什么语言,去编写一个什么样的项目,我们的第一步,总是去分析这个项目 ...

最新文章

  1. java 顺序栈_java用顺序栈实现数制转换 求完整程序!!
  2. 重磅:国拨概算5.34亿!“新一代人工智能”重大项目项目申报指南发布
  3. 用JWT来保护我们的ASP.NET Core Web API
  4. if函数python_pythonif函数
  5. webcrypto库下载_使用WebCrypto API的电子签名
  6. oracle查询cpu占用率高,解决oracle进程CPU占用过高问题
  7. 基于卷积神经网络的图像情感分析模型,Python实现
  8. html 定位_定位position
  9. windows系统mysql-5.7官方绿色版zip包安装教程
  10. java 斑马 打印 图片_Zebra打印机不会打印ZPL格式
  11. Quartus II破解出现的问题
  12. Netty权威指南2.1BIO通信Demo代码
  13. Lenovo笔记本BIOS详解
  14. 东北大学软件项目管理与过程改进题库——首字母排序
  15. 算法——最短路径应用
  16. 如何利用微信答题小程序实现盈利呢
  17. 猿创征文 |【算法入门必刷】数据结构-栈(三)
  18. 阿里巴巴矢量图标库全选
  19. Flutter couldn‘t find “libflutter.so“
  20. java web编程技术解题与实验指导_javaweb编程技术实验指导书

热门文章

  1. 数字+字母+特殊字符 的正则表达式
  2. 【小技巧】一种简单的办法在verilog中处理小数运算
  3. 白盒测试---讲解(1)
  4. 讲座笔记 | 陆铭 城市、区域和国家发展:空间政治经济学的理论和实证研究
  5. 理解快速排序 | 打通算法学习的任督二脉
  6. LiveData 源码解析(2.4.1 版本)
  7. 入门软件测试要学什么?软件测试技术学习教程分享
  8. 真实测评vivoY30和红米k30哪个好-vivoY30和红米k30区别
  9. 小武学fpgastep5
  10. OneNote for windows10 鼠标点击没反应