用IDEA弹奏《起风了》伴奏音乐 Java语言 <源码分享> GitHub有趣的小项目
本代码搬运b站上一位up主的
github的地址:GitHub - gulihua10010/playPiano: Java弹奏钢琴乐曲
项目结构如下:
首先是play包下三个类文件:
Animation:
package cn.jianwoo.play;/*** @author gulihua* @Description* @date 2022-11-15 00:58*/
public class Animation extends Thread{/** 音符 */private String[] notes;/** 间隔时间(单位:毫秒) */private int times;public Animation(int times) {this.times = times;}public Animation(String[] notes, int times) {this.notes = notes;this.times = times;}public String[] getNotes() {return this.notes;}public void setNotes(String[] notes) {this.notes = notes;}public int getTimes() {return this.times;}public void setTimes(int times) {this.times = times;}public Animation loadNotes(String notes) {this.notes = notes.split(" ");return this;}@Overridepublic void run() {try {int times = this.times;new Audio("audio/test.mp3").start();sleep(1000);int no = 1;
// System.out.print(no+": ");for (int i = 0; i < this.notes.length; i++){if (notes[i].length()<1){continue;}String n = this.notes[i].replace("+","").replace("-","");if (n.equals("\n")||n.equals("\r")){System.out.print("\n");no++;
// System.out.print(no+": ");continue;}switch (n){case "0":System.out.print("_");break;case "1":System.out.print("▁");break;case "2":System.out.print("▂");break;case "3":System.out.print("▃");break;case "4":System.out.print("▄");break;case "5":System.out.print("▅");break;case "6":System.out.print("▆");break;case "7":System.out.print("▇");break;}System.out.print(" ");sleep(times);}} catch (InterruptedException e) {throw new RuntimeException(e);}}
}
Audio:
package cn.jianwoo.play;import java.io.InputStream;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;import cn.hutool.core.io.resource.ResourceUtil;
import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.Player;public class Audio
{private static InputStream is;private Player player;ExecutorService service = Executors.newCachedThreadPool();public Audio(String path){is = ResourceUtil.getStream(path);try{player = new Player(is);}catch (JavaLayerException e){e.printStackTrace();}}public void start(){service.submit(() -> {try{player.play();}catch (JavaLayerException e){}});}
}
AudioPlay:
package cn.jianwoo.play;import cn.hutool.core.io.FileUtil;/*** @author gulihua* @Description* @date 2022-11-12 18:24*/
public class AudioPlay extends Thread
{/** 音符 */private String[] notes;/** 间隔时间(单位:毫秒) */private int times;/** 模式 */private Mode mode;public AudioPlay(String[] notes, int times){this.notes = notes;this.times = times;}public AudioPlay(String[] notes, int times, Mode mode){this.notes = notes;this.times = times;this.mode = mode;}public AudioPlay(String filePath, int times){String content = FileUtil.readString(filePath,"UTF-8");this.notes = content.split(" ");this.times = times;}public AudioPlay(int times){this.times = times;}public Mode getMode(){return this.mode;}public void setMode(Mode mode){this.mode = mode;}public String[] getNotes(){return this.notes;}public void setNotes(String[] notes){this.notes = notes;}public AudioPlay loadNotes(String notes){this.notes = notes.split(" ");return this;}public int getTimes(){return this.times;}public void setTimes(int times){this.times = times;}@Overridepublic void run(){try{int times = this.times;new Audio("audio/test.mp3").start();sleep(1000);for (int i = 0; i < notes.length; i++){if (notes[i].length()<1){continue;}switch (notes[i]){case "1--":new Audio("audio/ll1.mp3").start();sleep(times / 2);break;case "2--":new Audio("audio/ll2.mp3").start();sleep(times / 2);break;case "3--":new Audio("audio/ll3.mp3").start();sleep(times / 2);break;case "4--":new Audio("audio/ll4.mp3").start();sleep(times / 2);break;case "5--":new Audio("audio/ll5.mp3").start();sleep(times / 2);break;case "6--":new Audio("audio/ll6.mp3").start();sleep(times / 2);break;case "7--":new Audio("audio/ll7.mp3").start();sleep(times / 2);break;case "1-":new Audio("audio/l1.mp3").start();sleep(times / 2);break;case "2-":new Audio("audio/l2.mp3").start();sleep(times / 2);break;case "3-":new Audio("audio/l3.mp3").start();sleep(times / 2);break;case "4-":new Audio("audio/l4.mp3").start();sleep(times / 2);break;case "5-":new Audio("audio/l5.mp3").start();sleep(times / 2);break;case "6-":new Audio("audio/l6.mp3").start();sleep(times / 2);break;case "7-":new Audio("audio/l7.mp3").start();sleep(times / 2);break;case "1":new Audio("audio/m1.mp3").start();sleep(times / 2);break;case "2":new Audio("audio/m2.mp3").start();sleep(times / 2);break;case "3":new Audio("audio/m3.mp3").start();sleep(times / 2);break;case "4":new Audio("audio/m4.mp3").start();sleep(times / 2);break;case "5":new Audio("audio/m5.mp3").start();sleep(times / 2);break;case "6":new Audio("audio/m6.mp3").start();sleep(times / 2);break;case "7":new Audio("audio/m7.mp3").start();sleep(times / 2);break;case "1+":new Audio("audio/h1.mp3").start();sleep(times / 2);break;case "2+":new Audio("audio/h2.mp3").start();sleep(times / 2);break;case "3+":new Audio("audio/h3.mp3").start();sleep(times / 2);break;case "4+":new Audio("audio/h4.mp3").start();sleep(times / 2);break;case "5+":new Audio("audio/h5.mp3").start();sleep(times / 2);break;case "6+":new Audio("audio/h6.mp3").start();sleep(times / 2);break;case "7+":new Audio("audio/h7.mp3").start();sleep(times / 2);break;case "1++":new Audio("audio/hh1.mp3").start();sleep(times / 2);break;case "2++":new Audio("audio/hh2.mp3").start();sleep(times / 2);break;case "3++":new Audio("audio/hh3.mp3").start();sleep(times / 2);break;case "4++":new Audio("audio/hh4.mp3").start();sleep(times / 2);break;case "5++":new Audio("audio/hh5.mp3").start();sleep(times / 2);break;case "6++":new Audio("audio/hh6.mp3").start();sleep(times / 2);break;case "7++":new Audio("audio/hh7.mp3").start();sleep(times / 2);break;case "0":sleep(times / 2);break;default:continue;}sleep(times / 2);times = this.times;}}catch (Exception e){throw new RuntimeException(e);}}enum Mode {/** 主奏 */MAIN,/** 伴奏 */ACCOMPANIMENTS}
}
测试类:
package cn.jianwoo.test;import cn.jianwoo.play.Animation;
import cn.jianwoo.play.AudioPlay;import java.io.File;/*** @author gulihua* @Description* @date 2022-11-13 17:52*/
public class Test1 {public static void main(String[] args) {String path =new File("").getAbsolutePath() + File.separator + "src/main/resources/notes" + File.separator;String notes =" 7- 1 2 3 0 5- 5 3 0 0 0 0 0 0 0 0 \n" +" 7- 1 2 3 0 5- 5 3 2 3 1 2 7- 1 5- 0 \n" +" 7- 1 2 3 0 5- 5 3 0 0 0 0 0 0 0 0 \n" +" 7- 1 2 3 0 5- 5 3 2 3 1 2 7- 1 5- 0 \n" +" 7 1+ 2+ 3+ 0 5 5+ 3+ 0 0 0 0 0 0 0 0 \n" +" 7 1+ 2+ 3+ 0 5 5+ 3+ 2+ 3+ 1+ 2+ 7 1+ 5 0 \n" +" 7 1+ 2+ 3+ 0 5 5+ 3+ 0 0 0 0 0 0 0 0 \n" +" 2 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 \n" +" 2 0 0 1 2 0 0 1 2 0 3 0 5 0 3 0 \n" +" 2 0 0 1 2 0 0 1 2 3 2 1 6- 0 0 0 \n" +" 2 0 0 1 2 0 0 1 2 0 3 0 5 0 3 0 \n" +" 2 0 0 3 2 0 1 2 2 0 0 0 0 0 0 0 \n" +" 2 0 0 1 2 0 0 1 2 0 3 0 5 0 3 0 \n" +" 2 0 0 3 2 0 1 0 6- 0 0 0 \n" +" 3 2 1 2 1 0 0 0 \n" +" 3 2 1 2 1 0 0 \n" +" 5- 3 2 1 2 0 0 1 0 0 0 0 0 \n" +" 1 0 2 0 3 0 1 0 6 0 5 6 0 0 0 \n" +" 2 7 0 6 7 0 0 0 0 \n" +" 7 0 6 7 0 0 3 0 1+ 2+ 1+ 7 6 0 0 \n" +" 5 6 0 5 6 0 5 6 5 6 0 5 1 0 5 0 3 3 0 0 0 0 0 0 0 \n" +" 1 0 2 0 3 0 1 0 6 0 5 6 0 0 0 \n" +" 2 7 0 6 7 0 0 0 0 \n" +" 7 0 6 7 0 0 3 0 1+ 2+ 1+ 7 6 0 0 \n" +" 5 6 0 3+ 3+ 0 0 5 0 6 0 3+ 3+ 0 \n" +" 5 0 6 6 0 3- 0 3- 0 3- 0 3- 0 0 0 \n" +" 1+ 0 2+ 0 3+ 0 6+ 5+ 0 0 6+ 5+ 0 0 6+ 5+ 0 2+ 0 0 \n" +" 3+ 0 6+ 5+ 0 0 6+ 5+ 0 0 6+ 5+ 0 3+ 0 0 \n" +" 2+ 0 1+ 6 0 1+ 0 1+ 2+ 0 1+ 6 0 0 1+ 0 3+ 0 0 0 0 0 3+ 0 2+ 0 0 0 \n" +" 1+ 0 2+ 0 3+ 0 6+ 5+ 0 0 6+ 5+ 0 0 6+ 5+ 0 0 \n" +" 2+ 0 3+ 0 6+ 5+ 0 0 6+ 5+ 0 0 6+ 5+ 0 0 \n" +" 3+ 0 2+ 0 1+ 6 0 0 3+ 0 2+ 0 1+ \n" +" 6 0 1+ 0 0 1+ 0 0 0 0 0 0 0 0 0 0 0 \n" +" 6 3+ 0 0 2+ 0 1+ 6 0 3+ 0 0 2+ 0 1+ \n" +" 6 0 1+ 0 0 1+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n" +" 7 1+ 2+ 3+ 0 5 5+ 3+ 2+ 3+ 7 1+ 6 7 5 0 \n" +" 7 1+ 2+ 3+ 0 5 5+ 3+ 0 0 0 0 0 0 0 0 \n" +" 6+ 3+ 2+ 6 3 6 2+ 3+ 6+ 0 0 0 0 0 0 0 \n ";String accompaniments =" 4-- 0 1- 0 3- 0 0 0 5-- 0 7-- 0 2- 0 0 0 \n" +" 3-- 0 7-- 0 2- 0 0 0 6-- 0 1- 0 3- 0 0 0 \n" +" 4-- 0 1- 0 3- 0 0 0 5-- 0 7-- 0 2- 0 0 0 \n" +" 3-- 0 7-- 0 2- 0 0 0 6-- 0 1- 0 3- 0 0 0 \n" +" 4- 0 1- 0 3- 0 0 0 5-- 0 7-- 0 2- 0 0 0 \n" +" 3-- 0 7-- 0 2- 0 0 0 6-- 0 1- 0 3- 0 0 0 \n" +" 4-- 0 1- 0 3- 0 0 0 5-- 0 7-- 0 2- 0 0 0 \n" +" 3- 0 0 0 0 0 0 0 1- 0 0 0 0 0 0 0 \n " +"1-- 0 0 0 3- 0 0 0 3- 0 0 0 3- 0 0 0 \n" +" 7-- 0 0 0 2- 0 0 0 2- 0 0 0 2- 0 0 0 \n" +" 7-- 0 0 0 2- 0 0 0 2- 0 0 0 2- 0 0 0 4-- \n" +" 0 0 0 4- 0 0 0 4- 0 0 0 4- 0 0 0 \n " +" 2-- 0 0 0 2- 0 0 0 5-- 0 0 0 2- 0 0 0 6-- 0 0 0 3- 0 0 0 6-- 0 0 0 \n" +" 0 0 0 0 4-- 0 0 0 \n" +" 0 0 0 0 4- 0 0 \n" +" 0 0 0 0 0 1-- 0 5-- 0 1- 0 3- 0 \n" +" 1 0 0 0 1- 0 0 0 4-- 1- 4- 6- 1 0 4- \n" +" 0 5-- 2- 5- 7- 2 0 5- 0 \n" +" 3-- 7-- 3- 5- 7- 0 0 0 6-- 3- 6- 3- 1 0 0 \n" +" 0 4-- 1- 4- 6- 1 0 4- 0 5-- 2- 5- 7- 2- 0 5- 0 1-- 5-- 1- 3- 5- 0 3- 0 \n" +" 1 0 0 0 5- 0 0 0 4-- 1- 4- 1- 6- 0 1- \n" +" 0 5-- 2- 5- 2- 7- 0 2- 0 \n" +" 3-- 7-- 3- 5- 7- 0 3- 0 6-- 3- 6- 3- 1 0 3- \n" +" 0 4-- 1- 4- 6- 3 0 4- 0 5-- 2- 5- 7- 2 0 \n" +" 5- 0 6-- 0 6-- 0 6-- 0 6-- 0 6-- 0 0 0 \n" +" 0 0 0 0 4-- 0 1- 0 4- 0 0 0 5-- 0 2- 0 5- 0 0 0 \n" +" 3-- 0 7-- 0 3- 0 0 0 6-- 0 3- 0 6- 0 0 0 \n" +" 4-- 0 1- 0 4- 0 0 0 5-- 0 2- 0 5- 0 0 0 \n" +" 1- 0 5- 0 1 0 0 0 3- 0 7- 0 \n" +" 3 0 0 0 4-- 0 1- 0 4- 0 0 0 5-- 0 2- 0 5- 0 0 \n" +" 0 3-- 0 7-- 0 3- 0 0 0 6-- 0 3- 0 6- 0 \n" +" 0 0 4-- 0 1- 0 4- 0 0 0 5-- 0 2- 0 5- 0 0 \n" +" 0 1- 0 5- 0 1 0 5- 0 3- 0 0 0 \n" +" 0 0 0 0 4-- 0 0 0 0 0 0 0 5-- 0 0 0 0 0 0 0 \n" +" 4-- 0 1- 0 6- 0 1- 0 5-- 0 2- 0 5- 0 2- 0 \n" +" 3-- 0 7-- 0 5- 0 7-- 0 6-- 0 3- 0 1 0 3- 0 \n" +" 4-- 0 1- 0 6- 0 1- 0 5-- 0 2- 0 7- 0 2- 0 \n" +" 6-- 0 3- 0 6- 0 3- 0 1 0 0 0 3- 0 0 0 \n ";String note1 ="" +" 2 0 0 1 2 0 0 1 2 0 3 0 5 0 3 0 \n" +" 2 0 0 1 2 0 0 1 2 3 2 1 5- 0 0 0 \n" +" 2 0 0 1 2 0 0 1 2 0 3 0 5 0 3 0 \n" +" 2 0 0 3 2 0 1 0 2 0 0 0 0 0 0 0 \n" +" 2 0 0 1 2 0 0 1 2 0 3 0 5 0 3 0 \n" +" 2 0 0 3 2 0 1 0 6- 0 0 0 3 2 1 2 \n" +" 1 0 0 0 3 2 1 2 1 0 0 5- 3 2 1 2 \n" +" 1 0 0 0 0 0 0 0 1 0 2 0 3 0 1 0 \n" +" 6 0 5 6 0 0 0 1 7 0 6 7 0 0 0 0 \n" +" 7 0 6 7 0 0 3 0 1+ 2+ 1+ 7 6 0 5 0 \n" +" 6 0 5 6 0 5 6 5 6 0 5 2 0 5 0 0 \n" +" 3 0 0 0 0 0 0 0 1 0 2 0 3 0 1 0 \n" +" 6 0 5 6 0 0 0 1 7 0 6 7 0 0 0 0 \n" +" 7 0 6 7 0 0 3 0 1+ 2+ 1+ 7 6 0 5 0 \n" +" 6 0 3+ 3+ 0 0 5 0 6 0 3+ 3+ 0 5 0 6 \n" +" 6 0 0 0 0 0 0 0 0 0 0 0 1+ 0 2+ 0 \n" +" 3+ 0 6+ 5+ 0 0 6+ 5+ 0 0 6+ 5+ 0 0 2+ 3+ \n" +" 0 0 6+ 5+ 0 0 6+ 5+ 0 0 6+ 5+ 0 3+ 0 0 \n" +" 2+ 0 1+ 6 0 1+ 0 0 2+ 0 1+ 6 0 1+ 0 0 \n" +" 3+ 0 0 0 0 4+ 3+ 0 3+ 2+ 0 0 1+ 0 2+ 0 \n" +" 3+ 0 6+ 5+ 0 0 6+ 5+ 0 0 6+ 5+ 0 0 2+ 0 \n" +" 3+ 0 6+ 5+ 0 0 6+ 5+ 0 0 6+ 5+ 0 3+ 0 0 \n" +" 2+ 0 1+ 6 0 3+ 0 0 2+ 0 1+ 6 0 1+ 0 0 \n" +" 1+ 0 0 0 0 0 0 0 0 0 0 0 6 3+ 0 0 \n" +" 2+ 0 0 0 1+ 0 6 0 0 0 3+ 0 0 0 0 0 \n" +" 2+ 0 0 0 1+ 0 6 0 0 0 1+ 0 0 0 0 0 \n" +" 1+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n" +" 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n";String accompaniments1 =" 1-- 0 0 0 3- 0 0 0 3- 0 0 0 3- 0 0 0 \n" +" 7-- 0 0 0 2- 0 0 0 2- 0 0 0 2- 0 0 0 \n" +" 7-- 0 0 0 2- 0 0 0 2- 0 0 0 2- 0 0 0 \n" +" 4-- 0 0 0 4- 0 0 0 4- 0 0 0 4- 0 0 0 \n" +" 2-- 0 0 0 2- 0 0 0 5-- 0 0 0 2- 0 0 0 \n" +" 6-- 0 0 0 3- 0 0 0 6-- 0 0 0 0 0 0 0 \n" +" 4-- 0 0 0 0 0 0 0 5-- 0 0 0 0 0 0 0 \n" +" 1- 0 0 0 0 0 0 0 1- 0 0 0 0 0 0 0 \n" +" 4-- 0 0 0 0 0 0 0 5-- 0 0 0 0 0 0 0 \n" +" 3-- 0 0 0 0 0 0 0 6-- 0 0 0 0 0 0 0 \n" +" 4-- 0 0 0 0 0 0 0 5-- 0 0 0 0 0 0 0 \n" +" 1- 0 0 0 0 0 0 0 1- 0 0 0 0 0 0 0 \n" +" 4-- 0 0 0 0 0 0 0 5-- 0 0 0 0 0 0 0 \n" +" 3-- 0 0 0 0 0 0 0 6-- 0 0 0 0 0 0 0 \n" +" 4-- 0 0 0 0 0 0 0 5-- 0 0 0 0 0 0 0 \n" +" 6-- 0 0 0 3- 0 0 0 6- 0 0 0 0 0 0 0 \n" +" 4-- 0 0 0 4- 0 0 0 5-- 0 0 0 5- 0 0 0 \n" +" 3-- 0 0 0 3- 0 0 0 6-- 0 0 0 6- 0 0 0 \n" +" 4-- 0 0 0 4- 0 0 0 5-- 0 0 0 5- 0 0 0 \n" +" 1-- 0 0 0 1- 0 0 0 3-- 0 0 0 3- 0 0 0 \n" +" 4-- 0 0 0 4- 0 0 0 5-- 0 0 0 5- 0 0 0 \n" +" 3-- 0 0 0 3- 0 0 0 6-- 0 0 0 6- 0 0 0 \n" +" 4-- 0 0 0 4- 0 0 0 5-- 0 0 0 5- 0 0 0 \n" +" 6-- 0 0 0 3- 0 0 0 6-- 0 0 0 0 0 0 0 \n" +" 4-- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n" +" 5-- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n" +" 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n" +" 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ";new AudioPlay(180).loadNotes(notes + note1).start();new AudioPlay(180).loadNotes(accompaniments + accompaniments1).start();new Animation(180).loadNotes(notes + note1).start();}
}
演示如下:
项目中的resource文件夹在这个百度网盘链接中:
链接:https://pan.baidu.com/s/1LN6qKI0HYDmtUgbVBNc0IA?pwd=coin
提取码:coin
用IDEA弹奏《起风了》伴奏音乐 Java语言 <源码分享> GitHub有趣的小项目相关推荐
- 简单的Java web(JSP+Sevlet+Java+mysql)源码分享
引言:Java web项目主要采用mvc的的设计思想,系统主要采用java+jsp+servlet+mysql+eclipse实现,具有登陆.分页.导出excel,增删改查等功能,适合初学者,满足基本 ...
- 音乐平台程序源码分享
简介: 这是一个音乐分享平台源码,用户可以自行上传音乐分享,源码自适应手机,使用很方便. 安装说明: 演示环境:宝塔+PHP5.5 mysql5.6 Apache 2.4.46,把程序上传到根目录,然 ...
- 备忘录模式详解 (附java语言源码)
备忘录模式(Memento Pattern): 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保持该状态,这样以后就可以将该对象恢复到保存的状态.(Without violating ...
- 简单的java多线程源码分享(二)
2019独角兽企业重金招聘Python工程师标准>>> /** * 军队线程 * 模拟作战双方的行为 * @author gent * */ public class ArmyRun ...
- 一款类似天天音乐软件的源码分享
软件截图: 需要源码的留下邮箱,晚上下班会抽时间发到你们邮箱~ 或者进下载地址,我已上传到csdn:http://download.csdn.net/detail/wudalang_gd/954748 ...
- 基于Java语言在窗体上实现飞机大战小游戏
全套资料下载地址:https://download.csdn.net/download/sheziqiong/85594271 项目介绍 飞机大战:用 Java 语言在窗体上实现飞机大战小游戏,运行程 ...
- java计算机毕业设计vue开发一个简单音乐播放器源码+mysql数据库+系统+lw文档+部署
java计算机毕业设计vue开发一个简单音乐播放器源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计vue开发一个简单音乐播放器源码+mysql数据库+系统+lw文档+部署 本源码技 ...
- 基于Java毕业设计音乐播放平台源码+系统+mysql+lw文档+部署软件
基于Java毕业设计音乐播放平台源码+系统+mysql+lw文档+部署软件 基于Java毕业设计音乐播放平台源码+系统+mysql+lw文档+部署软件 本源码技术栈: 项目架构:B/S架构 开发语言: ...
- Go语言源码分析CAS的实现和Java如出一辙
看了Go的源码CAS这块实现和java还是类似的. 关于Java的分析参考:Java使用字节码和汇编语言同步分析volatile,synchronized的底层实现 都是使用汇编指令:LOCK+CMP ...
最新文章
- 快速排查feign.FeignException: status 500 …
- graphql_普通英语GraphQL指南
- linux终端显示被覆盖,图文说明:Linux监控命令全覆盖
- ssh key加密解密原理
- android monkey压力测试,Android-Monkey 压力测试
- flux_Flux建筑模式简介
- DNF包管理命令在CentOS 8和RHEL 8上的使用
- Beyond Compare 怎么新增与卸载文件格式
- GUI实现学生点名系统
- 2019年华南理工大学程序设计竞赛(春季赛)-H-Parco_Love_GCD
- 洛谷P1447 [NOI2010]能量采集(容斥)
- 《合约星期五》OKEx BTC季度合约 0726周报
- 新手好例子图书馆管理系统Python+MySQL+tkinter图形化界面+源码(注释详细)
- vue如何在一个工程里判断h5还是pc,(利用在一个页面显示不同router-view内容原理,本文只使用于单页面项目,多页面项目请查看我另一篇博文)
- Keil报错:Undefined symbol GPIO_Init
- c#子线程调用主线程控件
- Vue 2.0 商业案例一则-姜威-专题视频课程
- 马云厌恶美国 阿里巴巴转道香港上市
- 基于SSM框架宠物管理系统
- C#用Aforge.net类库调用摄像头实现监控或者拍照功能