求救:有人用java做过大华摄像头web端的二次开发吗

找了很多大华摄像头二次开发的例子,但是都没什么用。我就想在web页面上实时显示大华摄像头的监控视频,希望能够不用安装插件什么的,最好能适配各种浏览器。有做过的大佬能否分享一下!!!

1个回答

以前对接过大华的视频,记得是分页播放视频。大华的采用OCX控件,并且指定浏览器为google,还有版本限制。你在做这个项目还是好好和人家对接,不是在这里询问。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
求救:java调用大华摄像头问题
网上找了一些用java二次开发大华摄像头的例子,但在64位机器上不能运行,32位机器可以运行,问题出在Native加载dll文件导致的(Native.loadLibrary("dhnetsdk.dll"),但不知道怎么解决?
Java语言问题在线求救:Java语言的Integer和int是不是一回事?为什么要有两种,是不是造成了重复?
Java语言问题在线求救:Java语言的Integer和int是不是一回事?为什么要有两种,是不是造成了重复?
悬赏20分:Java+MyEclipse+在日志切面的插入日志问题
求救啊啊啊 上面的弹出的错误。 ![图片说明](https://img-ask.csdn.net/upload/202002/13/1581566730_27553.png) 下面是代码。 ![图片说明](https://img-ask.csdn.net/upload/202002/13/1581566808_115666.png)
自学MVC做的JAVAEE网站,遇到404求救
![图片说明](https://img-ask.csdn.net/upload/201911/22/1574424804_499937.png) ![图片说明](https://img-ask.csdn.net/upload/201911/22/1574424813_768240.png) 不知道如何解决 很绝望 ![图片说明](https://img-ask.csdn.net/upload/201911/22/1574424869_990973.png) 十一月 22, 2019 8:08:04 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Server version: Apache Tomcat/8.5.41 十一月 22, 2019 8:08:04 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Server built: May 4 2019 09:17:16 UTC 十一月 22, 2019 8:08:04 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Server number: 8.5.41.0 十一月 22, 2019 8:08:04 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: OS Name: Windows 8.1 十一月 22, 2019 8:08:04 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: OS Version: 6.3 十一月 22, 2019 8:08:04 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Architecture: amd64 十一月 22, 2019 8:08:04 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Java Home: C:\Program Files\Java\jdk1.8.0\jre 十一月 22, 2019 8:08:04 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: JVM Version: 1.8.0-b132 十一月 22, 2019 8:08:04 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: JVM Vendor: Oracle Corporation 十一月 22, 2019 8:08:04 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: CATALINA_BASE: D:\JAVA others\apache-tomcat-8.5.41 十一月 22, 2019 8:08:04 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: CATALINA_HOME: D:\JAVA others\apache-tomcat-8.5.41 十一月 22, 2019 8:08:04 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Command line argument: -Dcatalina.base=D:\JAVA others\apache-tomcat-8.5.41 十一月 22, 2019 8:08:04 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Command line argument: -Dcatalina.home=D:\JAVA others\apache-tomcat-8.5.41 十一月 22, 2019 8:08:04 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Command line argument: -Dwtp.deploy=D:\JAVA others\apache-tomcat-8.5.41\webapps 十一月 22, 2019 8:08:04 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Command line argument: -Djava.endorsed.dirs=D:\JAVA others\apache-tomcat-8.5.41\endorsed 十一月 22, 2019 8:08:04 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Command line argument: -Dfile.encoding=GBK 十一月 22, 2019 8:08:04 下午 org.apache.catalina.core.AprLifecycleListener lifecycleEvent 信息: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [C:\Program Files\Java\jdk1.8.0\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:/Program Files/Java/jdk1.8.0/bin/../jre/bin/server;C:/Program Files/Java/jdk1.8.0/bin/../jre/bin;C:/Program Files/Java/jdk1.8.0/bin/../jre/lib/amd64;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\Java\jdk1.8.0\bin;C:\Program Files (x86)\Microsoft SQL Server\90\Tools\binn\;C:\Program Files\nodejs\;C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\DTS\Binn\;C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\;C:\Program Files (x86)\Microsoft SQL Server\100\DTS\Binn\;C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies\;D:\JAVA others\apache-maven-3.6.1\bin;C:\Users\Administrator\AppData\Local\Microsoft\WindowsApps;C:\Users\Administrator\AppData\Roaming\npm;E:\Mysql\mysql-5.7.27-winx64\\bin;C:\Program Files (x86)\GtkSharp\2.12\bin;C:\Program Files\Common Files\Autodesk Shared\;C:\Program Files (x86)\Autodesk\Backburner\;C:\Users\Administrator\AppData\Local\Microsoft\WindowsApps;C:\Users\Administrator\AppData\Roaming\npm;C:\Users\Administrator\Desktop;;.] 十一月 22, 2019 8:08:04 下午 org.apache.coyote.AbstractProtocol init 信息: Initializing ProtocolHandler ["http-nio-8080"] 十一月 22, 2019 8:08:04 下午 org.apache.tomcat.util.net.NioSelectorPool getSharedSelector 信息: Using a shared selector for servlet write/read 十一月 22, 2019 8:08:05 下午 org.apache.coyote.AbstractProtocol init 信息: Initializing ProtocolHandler ["ajp-nio-8009"] 十一月 22, 2019 8:08:05 下午 org.apache.tomcat.util.net.NioSelectorPool getSharedSelector 信息: Using a shared selector for servlet write/read 十一月 22, 2019 8:08:05 下午 org.apache.catalina.startup.Catalina load 信息: Initialization processed in 686 ms 十一月 22, 2019 8:08:05 下午 org.apache.catalina.core.StandardService startInternal 信息: Starting service [Catalina] 十一月 22, 2019 8:08:05 下午 org.apache.catalina.core.StandardEngine startInternal 信息: Starting Servlet Engine: Apache Tomcat/8.5.41 十一月 22, 2019 8:08:05 下午 org.apache.jasper.servlet.TldScanner scanJars 信息: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time. 十一月 22, 2019 8:08:10 下午 org.apache.catalina.util.SessionIdGeneratorBase createSecureRandom 警告: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [5,002] milliseconds. 十一月 22, 2019 8:08:10 下午 org.apache.catalina.startup.HostConfig deployDirectory 信息: Deploying web application directory [D:\JAVA others\apache-tomcat-8.5.41\webapps\docs] 十一月 22, 2019 8:08:10 下午 org.apache.catalina.startup.HostConfig deployDirectory 信息: Deployment of web application directory [D:\JAVA others\apache-tomcat-8.5.41\webapps\docs] has finished in [19] ms 十一月 22, 2019 8:08:10 下午 org.apache.catalina.startup.HostConfig deployDirectory 信息: Deploying web application directory [D:\JAVA others\apache-tomcat-8.5.41\webapps\examples] 十一月 22, 2019 8:08:10 下午 org.apache.catalina.core.ApplicationContext log 信息: ContextListener: contextInitialized() 十一月 22, 2019 8:08:10 下午 org.apache.catalina.core.ApplicationContext log 信息: SessionListener: contextInitialized() 十一月 22, 2019 8:08:10 下午 org.apache.catalina.core.ApplicationContext log 信息: ContextListener: attributeAdded('StockTicker', 'async.Stockticker@1a91efec') 十一月 22, 2019 8:08:10 下午 org.apache.catalina.startup.HostConfig deployDirectory 信息: Deployment of web application directory [D:\JAVA others\apache-tomcat-8.5.41\webapps\examples] has finished in [306] ms 十一月 22, 2019 8:08:10 下午 org.apache.catalina.startup.HostConfig deployDirectory 信息: Deploying web application directory [D:\JAVA others\apache-tomcat-8.5.41\webapps\host-manager] 十一月 22, 2019 8:08:11 下午 org.apache.catalina.startup.HostConfig deployDirectory 信息: Deployment of web application directory [D:\JAVA others\apache-tomcat-8.5.41\webapps\host-manager] has finished in [26] ms 十一月 22, 2019 8:08:11 下午 org.apache.catalina.startup.HostConfig deployDirectory 信息: Deploying web application directory [D:\JAVA others\apache-tomcat-8.5.41\webapps\manager] 十一月 22, 2019 8:08:11 下午 org.apache.catalina.startup.HostConfig deployDirectory 信息: Deployment of web application directory [D:\JAVA others\apache-tomcat-8.5.41\webapps\manager] has finished in [31] ms 十一月 22, 2019 8:08:11 下午 org.apache.catalina.startup.HostConfig deployDirectory 信息: Deploying web application directory [D:\JAVA others\apache-tomcat-8.5.41\webapps\ROOT] 十一月 22, 2019 8:08:11 下午 org.apache.catalina.startup.HostConfig deployDirectory 信息: Deployment of web application directory [D:\JAVA others\apache-tomcat-8.5.41\webapps\ROOT] has finished in [19] ms 十一月 22, 2019 8:08:11 下午 org.apache.coyote.AbstractProtocol start 信息: Starting ProtocolHandler ["http-nio-8080"] 十一月 22, 2019 8:08:11 下午 org.apache.coyote.AbstractProtocol start 信息: Starting ProtocolHandler ["ajp-nio-8009"] 十一月 22, 2019 8:08:11 下午 org.apache.catalina.startup.Catalina start 信息: Server startup in 6062 ms ![图片说明](https://img-ask.csdn.net/upload/201911/22/1574424946_347972.png)![图片说明](https://img-ask.csdn.net/upload/201911/22/1574424951_857846.png)
求救:JAVA dom4j获取XML嵌套节点属性值
本人小白,求JAVA DOM4J源码,如: ``` <?xml version="1.0" encoding="UTF-8"?> <test> <a name="1"> <a name="2">测试</a> </a> </test> ``` dom4j怎么解出a节点name属性值,即获得1 2 (*a节点可能嵌套了多个a节点,所以节点路径不能写死*)
JAVA小白求救:坦克大战-多关卡咋做?没思路。。。
坦克大战-多关卡咋做: 自己代码如下: //坦克大战:-换关卡,-IO声音流,把爆炸换成外面的图片,有BUG继续游戏的时候看不到爆炸一下才能看到地方坦克, import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.util.*; import java.io.*; public class Tank1 extends JFrame implements ActionListener{ MyPanel mp=null; StartPanel gkmp=null; //Record record=null; JMenuBar cd=null;//??不熟 JMenu cd1=null;//??不熟 JMenu cd2=null; JMenuItem cd1xl1=null;//菜单栏1系列的1 JMenuItem cd1xl2=null;//菜单栏1系列的2 JMenuItem cd1xl3=null;//菜单栏1系列的1 JMenuItem cd1xl4=null;//菜单栏1系列的2 JMenuItem cd2xl1=null;//菜单栏2系列的1 JLabel imageJLabel=null; String newGame="newGame";//? //Image tp1=null; public static void main(String[] args) { Tank1 t1=new Tank1(); } public Tank1(){ gkmp=new StartPanel(); mp=new MyPanel(newGame);//?? Record record=new Record();//创建一个记录对象 Thread t=new Thread(gkmp); t.start(); cd=new JMenuBar();//菜单栏 不熟 cd1=new JMenu("游戏(G)");//第一个菜单栏的第一个菜单 cd1.setMnemonic('G');//快界键 cd2=new JMenu("设置(Z)"); cd2.setMnemonic('Z'); cd1xl1=new JMenuItem("开始新游戏(N)");//菜单系列 cdxl cd1xl1.setMnemonic('N'); cd1xl1.addActionListener(this);//加组件监听 cd1xl1.setActionCommand("newGame");//设置键值,和上文同名参数有啥关系没? cd1.add(cd1xl1); cd1xl2=new JMenuItem("继续游戏(H)");//菜单系列 cdxl cd1xl2.setMnemonic('H'); cd1xl2.addActionListener(this);//加组件监听 cd1xl2.setActionCommand("goonGame");//设置键值 cd1.add(cd1xl2); cd1xl3=new JMenuItem("保存退出(S)");//菜单系列 cdxl cd1xl3.setMnemonic('S'); cd1xl3.addActionListener(this);//加组件监听 cd1xl3.setActionCommand("saveOut");//设置键值 cd1.add(cd1xl3); cd1xl4=new JMenuItem("退出(Q)"); cd1xl4.setMnemonic('Q'); cd1xl4.addActionListener(this);//加组件监听 cd1xl4.setActionCommand("exit");//设置键值 cd1.add(cd1xl4); cd.add(cd1);//给菜单栏 cd 添加菜单 cd1 cd2xl1=new JMenuItem("速度(F)");//菜单系列 cdxl 没做好效果? cd1xl4.setMnemonic('F'); cd1xl4.addActionListener(this);//加组件监听 cd1xl4.setActionCommand("FSpeed");//设置键值 cd2.add(cd2xl1); cd.add(cd2); ImageIcon img = new ImageIcon("E:/Tank1/tankebig.PNG"); JLabel imageJLabel = new JLabel(img); gkmp.add(imageJLabel); this.add(gkmp); this.setJMenuBar(cd); this.setTitle("坦克大战"); ImageIcon tp1=new ImageIcon("E:/Tank1/tankexiao.PNG");//设置小图标地址要写全路径 this.setIconImage(tp1.getImage()); this.setSize(700,620); this.setLocation(300,80); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true);//可见 this.setResizable(false);//可调 // this.setResizable(true); } public void actionPerformed(ActionEvent e){ //boolean flag=true; if(e.getActionCommand().equals("newGame")) { this.remove(gkmp);//取消界面 gkmp if(mp.flag==false)//因为在主类构造函数开始就创建了mp,所以可以引用flag变量 { this.remove(mp); mp=new MyPanel("newGame"); } this.add(mp); this.addKeyListener(mp); Thread t=new Thread(mp);//启动我的MyPanel模板对象mp的线程 t.start();//叫醒线程 this.setVisible(true);//因为默认的是不可见,必须写这个!! Record.bcjl();//???? }else if(e.getActionCommand().equals("saveOut")) { Record record0=new Record(); // record0.setDtk(mp.dtk); record0.cunpan();///?????? System.exit(0);//游戏退出 }else if(e.getActionCommand().equals("exit")) { Record.bcjl(); System.exit(0);//游戏退出 }else if(e.getActionCommand().equals("goonGame")){ this.remove(gkmp); if(mp.flag==false)//因为在主类构造函数开始就创建了mp,所以可以引用flag变量 { this.remove(mp); mp=new MyPanel("goonGame"); } Thread t=new Thread(mp); t.start(); this.add(mp); this.addKeyListener(mp); this.setVisible(true); } } class StartPanel extends JPanel implements Runnable //开始界面类 { int time=0; public void paint(Graphics g){ super.paint(g); // g.fillRect(0, 0, 600, 500);//设置画布 g.setColor(Color.black);//设置颜色 Color mycolor1=new Color(250,50,0);//自定义红色 g.setFont(new Font("华文琥珀",Font.BOLD,80));//设置字体//? g.drawString("坦克大战",190 , 460);//绘字符串 g.setColor(Color.black);//设置颜色 g.setFont(new Font("黑体",1,14));//设置字体 g.drawString("李晋祥",648 , 552);//绘字符串 if(time%2==0) { g.setColor(Color.white);//设置颜色 g.setFont(new Font("华文行楷",3,35));//字体:华康楷体, Ravie, OCR A Extended g.drawString("准备战斗",270 , 345);//绘字符串 } } StartPanel(){ } public void run(){ while(true){ try{ Thread.sleep(400); }catch(Exception e){} time++; this.repaint(); } } } class MyPanel extends JPanel implements KeyListener,Runnable { //Vector<MyTank> mts=new Vector<MyTank>();//建立一个我的坦克集合类可以出无限个坦克 MyTank mt=null; MyTank mt0=null; MyTank mt01=null; MyTank mt02=null; Vector<DiTank> dtk=new Vector<DiTank>();//建立一个敌坦克集合类 Props props=null; Vector<Baozha> bzjh=new Vector<Baozha>();//创建一个爆炸类的集合 Vector<Weizhi> wzjh=new Vector<Weizhi>();//建立一个位置集合类,为啥建立这集合类 int tksl=3;//坦克数量 int a=122; int b=455; int n=10; int myzdNum=4;//? int propsSort=5; int time=0; boolean flag=true;//标记是不是已经创建过MyPanel类 boolean b1=false; int x=1;//总关卡数? int rocket=1;//没用? int huopao=0;//? Color mycolor1=new Color(250,50,0);//自定义红色 Color mycolor2=new Color(0,250,50);//自定义绿色 Color mycolor3=new Color(0,50,250);//自定义兰色 Color mycolor11=new Color(130,200,0);//自定义土黄 Color mycolor31=new Color(0,100,200);//自定义兰色 Color mycolor21=new Color(0,250,0);//自定义绿色 JLabel imageJLabel0=null; JLabel imageJLabel1=null; ImageIcon img0=null;//? ImageIcon img1=null;//? public MyPanel(String ss) { ImageIcon img0 = new ImageIcon("e:/Tank1/background.jpg"); JLabel imageJLabel0 = new JLabel(img0); this.add(imageJLabel0); Record.dqjl();//? mt=new MyTank(600,280);//new多个可改为多个坦克,循环数组 mt0=new MyTank(550,280);//new多个可改为多个坦克,循环数组 mt01=new MyTank(550,330);//new多个可改为多个坦克,循环数组 mt02=new MyTank(600,330);//new多个可改为多个坦克,循环数组 props=new Props(30,30);//没有实际意义,为了new对象,必须要有个参数? if(ss.equals("newGame")){ // record=new Record(); for(int i=0;i<tksl;i++){ DiTank dt=new DiTank((i)*a,b);//添加出场敌坦 // dt.dtkxl(dtk);///???是不是敌人坦克血量 dt.setFangxiang(1);//给一个初始值,调drawTank()赋初值要用 Thread t2=new Thread(dt); t2.start(); Zidan zd=new Zidan(dt.x,dt.y,1);//?这是干啥加子弹元素吗? Thread t3=new Thread(zd);//? t3.start(); dtk.add(dt); } }else if(ss.equals("goongame")){//继续游戏有问题 感觉读取存盘信息有问题 wzjh=Record.dupan(); for(int i=0;i<wzjh.size();i++){ Weizhi wz=wzjh.get(i); DiTank dt=new DiTank(wz.x,wz.y);//添加出场敌坦 dt.setFangxiang(wz.fangxiang); // dt.dtkxl(dtk);//?敌坦克血量,好像暂时用不着 // dt.setFangxiang(1);//给一个初始值,调drawTank()赋初值要用 Thread t2=new Thread(dt); t2.start(); Zidan zd=new Zidan(dt.x,dt.y,1);//?这是干啥加子弹元素吗? Thread t3=new Thread(zd);//? t3.start(); dtk.add(dt); } } flag=false;//MyPanel类的mp创建过一次就标记为假 // this.repaint(); // Record.next(); // if(Record.next()%2!=0){ // Record.reMtNum();//需要吗? // Record.reDtNum();//需要吗? // Record.reAddMtNum(); // } } public void outNum(Graphics g)//画出统计数据的方法也即使显示数量的函数 { g.setColor(Color.cyan); this.drawTank(500,150,g,0,0);//引用drawtank()的不能是g,而是this this.drawTank(570,150,g,0,1); this.drawTank(500,70,g,0,1); g.setColor(Color.black); g.setFont(new Font("仿宋",2,20));//??换换字体效果 g.drawString(Record.getDtNum()+"",600,170); if((Record.getMtNum()+Record.getAddMtNum())>=0){ g.drawString((Record.getMtNum()+Record.getAddMtNum())+"",530,170);// }else{ g.drawString((Record.getAddMtNum())+"",530,170); } g.setColor(Color.blue); g.setFont(new Font("方正小标宋",1,17)); g.drawString("干掉的坦克总数:",510,40); g.setColor(Color.black); g.setFont(new Font("仿宋",2,20)); g.drawString(Record.getSumDtNum()+"",530,90); g.setColor(Color.MAGENTA);//设置颜色 g.setFont(new Font("隶书",0,20));//设置字体 g.drawString("第"+x+"关",500 , 200);//绘字符串 } public void paint(Graphics g){//这个方法每当窗口激活,最小化,调用repaint()方法都会运行,线程中调用就一直显示 super.paint(g); // g.fillRect(0,0,400,300);//做个背景画布,默认黑色 this.outNum(g);//调用显示数量的函数 g.setColor(Color.red);//设置颜色 g.fillRect(530, 210, 30, 20); g.setColor(Color.black);//设置颜色 g.drawLine(530, 210, 530, 320); g.setColor(mycolor11);//设置颜色 if(mt.live==true){ this.drawTank(mt.getX(),mt.getY(),g,mt.fangxiang,0); } if(mt0.live==true){ this.drawTank(mt0.getX(),mt0.getY(),g,mt0.fangxiang,2); } if(mt01.live==true){ this.drawTank(mt01.getX(),mt01.getY(),g,mt01.fangxiang,2); } if(mt02.live==true){ this.drawTank(mt02.getX(),mt02.getY(),g,mt02.fangxiang,2); } if(mt.getLive()==false){ g.setColor(mycolor11);//设置颜色 g.setFont(new Font("Gill Sans Ultra Bold Condensed",1,40));//字体:华康楷体, Ravie, OCR A Extended g.drawString("game over...",200 , 220);//绘字符串 this.repaint(); } if(Record.getDtNum()%6==0&&(Record.getDtNum()>10)){ // if(time%2==0) // { g.setColor(Color.blue);//设置颜色 g.setFont(new Font("华文行楷",1,35));//字体:华康楷体, Ravie, OCR A Extended g.drawString("你行不行?",310 , 265);//绘字符串 // } } if(Record.getDtNum()==0){ g.setColor(Color.red);//设置颜色 g.setFont(new Font("华文行楷",1,35));//字体:华康楷体, Ravie, OCR A Extended g.drawString("过关!",300 , 265);//绘字符串 } for(int i=0;i<dtk.size();i++)//画敌人坦克asd { DiTank dt=dtk.get(i); if(dt.live==true){ this.drawTank(dt.getX(),dt.getY(),g,dt.fangxiang,1);//??!!注意用法用dtk 还是dt调用 } } for(int i=0;i<mt.aa.size();i++)//画我的子弹 { Zidan zd=mt.aa.get(i); if(mt.zd!=null&&mt.zd.live==true) //???画子弹的条件 { //g.fill3DRect((mt.zd.x-2),(mt.zd.y-2), 8, 8, false); //???画子弹火力圈 g.setColor(Color.black);//子弹颜色设置为白色 g.fillOval(zd.x+1,zd.y+1, 4,4); } if(zd.live==false) { mt.aa.remove(zd); } } //this.repaint();//? for(int i=0;i<dtk.size();i++)//画敌人的子弹 { DiTank dt=dtk.get(i); for(int j=0;j<dt.dzd.size();j++) { Zidan zd=dt.dzd.get(j); if(zd!=null&&dtk.get(i).live==true) { g.setColor(Color.red);//子弹颜色设置为红色,次处不进循环是不是更好? g.fillOval(zd.x+1,zd.y+1, 4,4); } if(zd.live==false)//删除生命为假的敌人子弹???? { dt.dzd.remove(zd); } } } for(int i=0;i<bzjh.size();i++) //画爆炸 { Baozha bz=bzjh.get(i); if(bzjh.get(i).livetime>140){ g.setColor(Color.red); g.fillOval(bz.x, bz.y+5, 20,20 );//代替上面的句子 //g.fillOval(bz.x, bz.y, 20,5 );//可以用来做合成图形,但是要定好坐标点 }else if((bzjh.get(i).livetime<=100)&&(bzjh.get(i).livetime>50)){ g.setColor(Color.orange); g.fillOval(bz.x+4, bz.y+9, 12,12 ); }else if((bzjh.get(i).livetime<=50)&&(bzjh.get(i).livetime>20)){ g.setColor(Color.yellow); g.fillOval(bz.x+7, bz.y+11,5,5 ); }else{ g.setColor(Color.pink); g.fillOval(bz.x+10, bz.y+13,2,2 ); } bz.ltjs(); //生存时间减少函数 if(bz.livetime==0){ bzjh.remove(bz); } } // if(props.live==true){//画道具 this.drawProps(props.getX(),props.getY(),g,props.getleixing()); } //} this.repaint();//教学视频少了这句,子弹无法自主运行,主类启动线程后仍然可动 } public void keyPressed(KeyEvent e)//键盘输入事件 { if(mt.getLive()==true){ if(e.getKeyCode()==KeyEvent.VK_W){ this.mt.setFangxiang(0); this.mt.xiangshang(); }else if(e.getKeyCode()==KeyEvent.VK_S){ this.mt.setFangxiang(1); this.mt.xiangxia(); }else if(e.getKeyCode()==KeyEvent.VK_A){ this.mt.setFangxiang(2); this.mt.xiangzuo(); }else if(e.getKeyCode()==KeyEvent.VK_D){ this.mt.setFangxiang(3); this.mt.xiangyou(); } if(e.getKeyCode()==KeyEvent.VK_J) { if((mt.aa.size()<myzdNum)&&(mt.live==true))//子弹设置最多 myzdNum 发 { this.mt.fszd();//调用发射子弹函数 } } } } public void crash(){ } public boolean addprops(Props props,MyTank mt)//吃道具触发 方法 (道具功能触发模型为边长20的正方形) { boolean b2=false; switch(props.leixing){ case 0://我的坦克速度提高//mt.fangxiang 0\1\2\3 if((mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15<props.getY()+20&&mt.getY()+15>props.getY())||(mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15>props.getY()&&mt.getY()+15<props.getY()+20)||(mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15>props.getY()&&mt.getY()+15<props.getY()+20)||(mt.getX()+15>props.getX()&&mt.getX()+15<props.getX()+20&&mt.getY()+10>props.getY()&&mt.getY()+10<props.getY()+20)){ props.live=false; mt.sudu=20; b2=true; } break; case 1://效果回到出生地 if((mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15<props.getY()+20&&mt.getY()+15>props.getY())||(mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15>props.getY()&&mt.getY()+15<props.getY()+20)||(mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15>props.getY()&&mt.getY()+15<props.getY()+20)||(mt.getX()+15>props.getX()&&mt.getX()+15<props.getX()+20&&mt.getY()+10>props.getY()&&mt.getY()+10<props.getY()+20)){ props.live=false; mt.setX(630); mt.setY(280); b2=true; } break; case 2://提高我可以发射的子弹数目 //mt.fangxiang 0\1\2\3 if((mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15<props.getY()+20&&mt.getY()+15>props.getY())||(mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15>props.getY()&&mt.getY()+15<props.getY()+20)||(mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15>props.getY()&&mt.getY()+15<props.getY()+20)||(mt.getX()+15>props.getX()&&mt.getX()+15<props.getX()+20&&mt.getY()+10>props.getY()&&mt.getY()+10<props.getY()+20)){ props.live=false; this.myzdNum=30; this.huopao=1; this.n=4; b2=true; } break; case 3://显示的敌人坦克全死,但实际效果是..是不出敌方坦克了!!!! if((mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15<props.getY()+20&&mt.getY()+15>props.getY())||(mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15>props.getY()&&mt.getY()+15<props.getY()+20)||(mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15>props.getY()&&mt.getY()+15<props.getY()+20)||(mt.getX()+15>props.getX()&&mt.getX()+15<props.getX()+20&&mt.getY()+10>props.getY()&&mt.getY()+10<props.getY()+20)){ props.live=false; for(int i=0;i<dtk.size();i++){ if(dtk.get(i).live==true){ dtk.get(i).live=false; Record.setDtNum();//有几个活坦克生命变假,就累计几辆dtNum } } b1=true; b2=true; } break; case 4://吃道具加命 if((mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15<props.getY()+20&&mt.getY()+15>props.getY())||(mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15>props.getY()&&mt.getY()+15<props.getY()+20)||(mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15>props.getY()&&mt.getY()+15<props.getY()+20)||(mt.getX()+15>props.getX()&&mt.getX()+15<props.getX()+20&&mt.getY()+10>props.getY()&&mt.getY()+10<props.getY()+20)){ props.live=false; Record.setAddMtNum(); b2=true; // System.out.println("吃道具加命程序,正常运行"); } break; } return b2; } // addMyTank++; //MyTank mt1=new MyTank(mt.getX(),mt.getY());//??创建另一个MyTank对象 // public void setAddMytank(){ // addMyTank++; // }; // public static int getAddMytank(){ // return addMyTank; // }; public void run() //我的画板的 线程函数 { while(true){ try{ Thread.sleep(50);// }catch(Exception e){} for(int i=0;i<mt.aa.size();i++)//我的子弹集中敌坦克的线程 { Zidan myzd=mt.aa.get(i); if(myzd.live){ for(int j=0;j<dtk.size();j++){ DiTank dt=dtk.get(j); // Zidan zd=dt.dzd.get(j);//为啥dzd可以直接用,不用创建// ||(b1==true&&Record.getDtNum()>0) if(dt.live)//内关联敌人坦克重生的一种情况,有敌人坦克被打中 { if(this.jzsf(myzd,dt)&&((Record.getDtNum()-tksl)>=0)){//调用jzsf(),打中同时,坦克定点?及时重生 DiTank dt0=new DiTank((int)(Math.random()*50+5)*10,(int)(Math.random()*100+450)); Thread t2=new Thread(dt0); t2.start(); Zidan zd0=new Zidan(dt0.x,dt0.y,dt0.fangxiang); Thread t3=new Thread(zd0); t3.start(); dt0.dzd.add(zd0); dtk.add(dt0); } } } } } if(Record.getDtNum()>=tksl&&b1==true){ //炸弹爆炸,敌坦克按条件重生, for(int i=0;i<tksl;i++){ DiTank dt1=new DiTank((int)(Math.random()*20)*10,(int)(Math.random()*100+450)); Thread t6=new Thread(dt1); t6.start(); Zidan zd1=new Zidan(dt1.x,dt1.y,dt1.fangxiang); Thread t7=new Thread(zd1); t7.start(); dt1.dzd.add(zd1); dtk.add(dt1); } b1=false; } if((Record.getDtNum()==(tksl-1))&&(b1==true)){ for(int i=0;i<tksl-1;i++){ DiTank dt1=new DiTank((int)(Math.random()*20)*10,(int)(Math.random()*100+450)); Thread t6=new Thread(dt1); t6.start(); Zidan zd1=new Zidan(dt1.x,dt1.y,dt1.fangxiang); Thread t7=new Thread(zd1); t7.start(); dt1.dzd.add(zd1); dtk.add(dt1); } b1=false; } if((Record.getDtNum()==(tksl-2))&&(b1==true)){ // for(int i=0;i<tksl-1;i++){ DiTank dt1=new DiTank((int)(Math.random()*20)*10,(int)(Math.random()*100+450)); Thread t6=new Thread(dt1); t6.start(); Zidan zd1=new Zidan(dt1.x,dt1.y,dt1.fangxiang); Thread t7=new Thread(zd1); t7.start(); dt1.dzd.add(zd1); dtk.add(dt1); b1=false; } for(int j=0;j<dtk.size();j++)//敌人的子弹击中我的坦克的线程 { DiTank dt=dtk.get(j);//取出所有敌方坦克 for(int i=0;i<dt.dzd.size();i++) { Zidan zd=dt.dzd.get(i);//? if(zd.live) { if(this.jzsf(zd,mt)==true){//调用 击中敌坦 函数 } } } } if((this.time%120)==0){//6秒发生1次 道具随机重置//draw mt hit props props.live=true; // props.leixing=2; props.leixing=(int)(Math.random()*propsSort); props.x=(int)(Math.random()*370); props.y=(int)(Math.random()*270); props.livetime=100;//道具生存期 } if(props.livetime>0){//道具生存期变化 props.livetime--; }else{ props.live=false; } if(mt.live==true&&props.live==true){//调用 吃道具 方法 this.addprops(props,mt); } time++; // if(SaveData.getSumDtNum()%20==0){ // Record.next(); // } this.repaint();//线程运行中重绘?? } } public void jzwf()//敌人子弹集中我方坦克的方法 { for(int i=0;i<this.dtk.size();i++){ DiTank dt=dtk.get(i); for(int j=0;j<dt.dzd.size();j++){ Zidan zd=dt.dzd.get(j); this.jzsf(zd, mt); } } } public void jzdf() //我的子弹击中坦克的方法 { for(int i=0;i<mt.aa.size();i++){ Zidan zd=mt.aa.get(i);//从我的子弹集合类取我的各个子弹 if(zd.live==true){ for(int j=0;j<dtk.size();j++){ DiTank dt=dtk.get(j);//从敌坦克集合类取出各个敌坦克 if(dt.live){ this.jzsf(zd,dt); // levelDtNum--; } } } this.repaint(); } } public boolean jzsf(Zidan zd,Tank tk)//击中双方的方法 { boolean b2=false; switch(tk.fangxiang) { case 0: case 1: if(zd.x>tk.x&&zd.x<tk.x+20&&zd.y>tk.y&&zd.y<tk.y+30)//分辨率判断? { if(tk instanceof DiTank){//只改这就实现 判断tk是不是DiTank的实例 Record.setDtNum(); Record.setSumDtNum(); // Record.setAddMtNum(); tk.live=false; b2=true; }else{ // System.out.println("Record.getMtNum()="+Record.getMtNum()); Record.setMtNum();//Record.getSumMtNum()一直小于0 ?bug if(Record.getMtNum()+1<=0){ Record.lowAddMtNum(); } // System.out.println("Record.getMtNum()="+Record.getMtNum()); // System.out.println("Record.AddMtNum()="+Record.getAddMtNum()); if(Record.getMtNum()+Record.getAddMtNum()>0){//bug 被打一下就游戏结束 已经解决 mt.setX(140); mt.setY(232); } if(Record.getMtNum()+Record.getAddMtNum()<=0){ tk.live=false; } } zd.live=false; Baozha bz=new Baozha(tk.x,tk.y); bzjh.add(bz); } break; case 2: case 3: if(zd.x>tk.x&&zd.x<tk.x+30&&zd.y>tk.y&&zd.y<tk.y+20){ if(tk instanceof DiTank){//只改这就实现 判断tk是不是DiTank的实例 Record.setDtNum();//每次敌人坦克数量-1 Record.setSumDtNum(); // Record.setAddMtNum(); tk.live=false; b2=true; }else{ // System.out.println("Record.getMtNum()="+Record.getMtNum()); Record.setMtNum();//Record.getSumMtNum()一直小于0 ?bug if(Record.getMtNum()+1<=0){ Record.lowAddMtNum(); } // System.out.println("Record.getMtNum()="+Record.getMtNum()); // System.out.println("Record.AddMtNum()="+Record.getAddMtNum()); if(Record.getMtNum()+Record.getAddMtNum()>0){//bug 被打一下就游戏结束 已经解决 mt.setX(550); mt.setY(270); } if(Record.getMtNum()+Record.getAddMtNum()<=0){ tk.live=false; } } zd.live=false; Baozha bz=new Baozha(tk.x,tk.y); bzjh.add(bz); } break; } return b2; } public void keyTyped(KeyEvent e){} public void keyReleased(KeyEvent e){} public void drawTank(int x,int y,Graphics g,int fangxiang,int leixing)//画坦克函数 { int m=10; //double n=1; switch(leixing)//不同阵营坦克 { case 0://我的坦克 g.setColor(Color.yellow);// 我的坦克颜色 黄色 // g.fillOval(170*huopao, 240*huopao, 30*huopao, 30*huopao); m=11; break; case 1://敌人的坦克 g.setColor(mycolor3);//敌人坦克颜色 蓝色 // m=15; break; case 2://玩家2的坦克 g.setColor(mycolor1);//敌人坦克颜色 绿色 break; } switch(fangxiang)//不同方向的坦克(0,1,2,3)分别代表上下左右,中心原点不变做坐标变换 { case 0://上 g.fill3DRect(x,y,5,30,true); g.fill3DRect(x+15,y,5,30,true); g.fill3DRect(x+5,y+5,10,20,true); g.drawLine(x+10,y-5,x+10,(y+10)); g.setColor(Color.black); g.fillOval(x+5,y+10,10,10); break; case 1://下 g.fill3DRect(x,y,5,30,true); g.fill3DRect(x+15,y,5,30,true); g.fill3DRect(x+5,y+5,10,20,true); g.drawLine(x+10,y+10,x+10,(y+35)); g.setColor(Color.black); g.fillOval(x+5,y+10,10,10); break; case 2://左 g.fill3DRect(x-5,y+5,30,5,true); g.fill3DRect(x-5,y+20,30,5,true); g.fill3DRect(x,y+10,20,10,true); g.drawLine((x-10)+n-m,y+15,(x+10),(y+15)); g.setColor(Color.black); g.fillOval(x+5,y+10,10,10); break; case 3://右 g.fill3DRect(x-5,y+5,30,5,true); g.fill3DRect(x-5,y+20,30,5,true); g.fill3DRect(x,y+10,20,10,true); g.drawLine((x+10)-n+m,y+15,(x+30),(y+15)); g.setColor(Color.black); g.fillOval(x+5,y+10,10,10); break; } } public void drawProps(int x,int y,Graphics g,int leixing)//画道具 { if(time%8==0){ switch(leixing) { case 0://画车轮对应坦克加速 g.setColor(Color.white); g.fillOval(x, y, 21, 21); g.setColor(Color.black); g.fillOval(x+2,y+2,16,16); g.setColor(Color.white); g.drawOval(x+2,y+2,16,16); g.drawLine(x+2,y+10,x+18,y+10); g.drawLine(x+10,y+2,x+10,y+18); g.drawLine(x+16,y+4,x+4,y+16); g.drawLine(x+4,y+4,x+16,y+16); break; case 1://画回出生地道具图标 g.setColor(Color.white); g.drawRoundRect(x, y, 20, 20, 5, 5); g.setColor(mycolor3); g.fillRoundRect(x+5, y+5, 10, 10, 5, 5); break; case 2://画增加子弹数目道具//? g.setColor(mycolor2); g.fill3DRect(x-15,y+8,30,5,false); g.fill3DRect(x-15,y+6,10,10,true); g.fillOval(x+15,y+7,7,7); break; case 3://画炸弹 g.setColor(mycolor2); g.fillRect(x, y, 21, 21); g.setColor(Color.black); g.fillRect(x+8,y+6,6,2); g.fillOval(x+3,y+7,14,14); g.drawLine(x+11, y+3, x+11, y+6); g.setColor(Color.white); g.drawLine(x+11, y+15, x+8, y+14); break; case 4://画小坦克道具 g.setColor(Color.yellow); g.fill3DRect(x,y,20,3,true); g.fill3DRect(x,y+10,20,3,true); g.fill3DRect(x+3,y+3,14,7,false); g.fillOval(x+6,y+3,7,7); g.drawLine(x-7,y+6,x+7,y+6); break; } } } } } //坦克大战: 不会做多关卡??!! //IO声音流没做,IO流存储也有点问题,有BUG继续游戏的时候看不到爆炸一下才能看到地方坦克, import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.util.*; import java.io.*; public class Tank1 extends JFrame implements ActionListener{ MyPanel mp=null; StartPanel gkmp=null; //Record record=null; JMenuBar cd=null;//??不熟 JMenu cd1=null;//??不熟 JMenu cd2=null; JMenuItem cd1xl1=null;//菜单栏1系列的1 JMenuItem cd1xl2=null;//菜单栏1系列的2 JMenuItem cd1xl3=null;//菜单栏1系列的1 JMenuItem cd1xl4=null;//菜单栏1系列的2 JMenuItem cd2xl1=null;//菜单栏2系列的1 JLabel imageJLabel=null; String newGame="newGame";//? //Image tp1=null; public static void main(String[] args) { Tank1 t1=new Tank1(); } public Tank1(){ gkmp=new StartPanel(); mp=new MyPanel(newGame);//?? Record record=new Record();//创建一个记录对象 Thread t=new Thread(gkmp); t.start(); cd=new JMenuBar();//菜单栏 不熟 cd1=new JMenu("游戏(G)");//第一个菜单栏的第一个菜单 cd1.setMnemonic('G');//快界键 cd2=new JMenu("设置(Z)"); cd2.setMnemonic('Z'); cd1xl1=new JMenuItem("开始新游戏(N)");//菜单系列 cdxl cd1xl1.setMnemonic('N'); cd1xl1.addActionListener(this);//加组件监听 cd1xl1.setActionCommand("newGame");//设置键值,和上文同名参数有啥关系没? cd1.add(cd1xl1); cd1xl2=new JMenuItem("继续游戏(H)");//菜单系列 cdxl cd1xl2.setMnemonic('H'); cd1xl2.addActionListener(this);//加组件监听 cd1xl2.setActionCommand("goonGame");//设置键值 cd1.add(cd1xl2); cd1xl3=new JMenuItem("保存退出(S)");//菜单系列 cdxl cd1xl3.setMnemonic('S'); cd1xl3.addActionListener(this);//加组件监听 cd1xl3.setActionCommand("saveOut");//设置键值 cd1.add(cd1xl3); cd1xl4=new JMenuItem("退出(Q)"); cd1xl4.setMnemonic('Q'); cd1xl4.addActionListener(this);//加组件监听 cd1xl4.setActionCommand("exit");//设置键值 cd1.add(cd1xl4); cd.add(cd1);//给菜单栏 cd 添加菜单 cd1 cd2xl1=new JMenuItem("速度(F)");//菜单系列 cdxl 没做好效果? cd1xl4.setMnemonic('F'); cd1xl4.addActionListener(this);//加组件监听 cd1xl4.setActionCommand("FSpeed");//设置键值 cd2.add(cd2xl1); cd.add(cd2); ImageIcon img = new ImageIcon("E:/Tank1/tankebig.PNG"); JLabel imageJLabel = new JLabel(img); gkmp.add(imageJLabel); this.add(gkmp); this.setJMenuBar(cd); this.setTitle("坦克大战"); ImageIcon tp1=new ImageIcon("E:/Tank1/tankexiao.PNG");//设置小图标地址要写全路径 this.setIconImage(tp1.getImage()); this.setSize(700,620); this.setLocation(300,80); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true);//可见 this.setResizable(false);//可调 // this.setResizable(true); } public void actionPerformed(ActionEvent e){ //boolean flag=true; if(e.getActionCommand().equals("newGame")) { this.remove(gkmp);//取消界面 gkmp if(mp.flag==false)//因为在主类构造函数开始就创建了mp,所以可以引用flag变量 { this.remove(mp); mp=new MyPanel("newGame"); } this.add(mp); this.addKeyListener(mp); Thread t=new Thread(mp);//启动我的MyPanel模板对象mp的线程 t.start();//叫醒线程 this.setVisible(true);//因为默认的是不可见,必须写这个!! Record.bcjl();//???? }else if(e.getActionCommand().equals("saveOut")) { Record record0=new Record(); // record0.setDtk(mp.dtk); record0.cunpan();///?????? System.exit(0);//游戏退出 }else if(e.getActionCommand().equals("exit")) { Record.bcjl(); System.exit(0);//游戏退出 }else if(e.getActionCommand().equals("goonGame")){ this.remove(gkmp); if(mp.flag==false)//因为在主类构造函数开始就创建了mp,所以可以引用flag变量 { this.remove(mp); mp=new MyPanel("goonGame"); } Thread t=new Thread(mp); t.start(); this.add(mp); this.addKeyListener(mp); this.setVisible(true); } } class StartPanel extends JPanel implements Runnable //开始界面类 { int time=0; public void paint(Graphics g){ super.paint(g); // g.fillRect(0, 0, 600, 500);//设置画布 g.setColor(Color.black);//设置颜色 Color mycolor1=new Color(250,50,0);//自定义红色 g.setFont(new Font("华文琥珀",Font.BOLD,80));//设置字体//? g.drawString("坦克大战",190 , 460);//绘字符串 g.setColor(Color.black);//设置颜色 g.setFont(new Font("黑体",1,14));//设置字体 g.drawString("李晋祥",648 , 552);//绘字符串 if(time%2==0) { g.setColor(Color.white);//设置颜色 g.setFont(new Font("华文行楷",3,35));//字体:华康楷体, Ravie, OCR A Extended g.drawString("准备战斗",270 , 345);//绘字符串 } } StartPanel(){ } public void run(){ while(true){ try{ Thread.sleep(400); }catch(Exception e){} time++; this.repaint(); } } } class MyPanel extends JPanel implements KeyListener,Runnable { //Vector<MyTank> mts=new Vector<MyTank>();//建立一个我的坦克集合类可以出无限个坦克 MyTank mt=null; MyTank mt0=null; MyTank mt01=null; MyTank mt02=null; Vector<DiTank> dtk=new Vector<DiTank>();//建立一个敌坦克集合类 Props props=null; Vector<Baozha> bzjh=new Vector<Baozha>();//创建一个爆炸类的集合 Vector<Weizhi> wzjh=new Vector<Weizhi>();//建立一个位置集合类,为啥建立这集合类 int tksl=3;//坦克数量 int a=122; int b=455; int n=10; int myzdNum=4;//? int propsSort=5; int time=0; boolean flag=true;//标记是不是已经创建过MyPanel类 boolean b1=false; int x=1;//总关卡数? int rocket=1;//没用? int huopao=0;//? Color mycolor1=new Color(250,50,0);//自定义红色 Color mycolor2=new Color(0,250,50);//自定义绿色 Color mycolor3=new Color(0,50,250);//自定义兰色 Color mycolor11=new Color(130,200,0);//自定义土黄 Color mycolor31=new Color(0,100,200);//自定义兰色 Color mycolor21=new Color(0,250,0);//自定义绿色 JLabel imageJLabel0=null; JLabel imageJLabel1=null; ImageIcon img0=null;//? ImageIcon img1=null;//? public MyPanel(String ss) { ImageIcon img0 = new ImageIcon("e:/Tank1/background.jpg"); JLabel imageJLabel0 = new JLabel(img0); this.add(imageJLabel0); Record.dqjl();//? mt=new MyTank(600,280);//new多个可改为多个坦克,循环数组 mt0=new MyTank(550,280);//new多个可改为多个坦克,循环数组 mt01=new MyTank(550,330);//new多个可改为多个坦克,循环数组 mt02=new MyTank(600,330);//new多个可改为多个坦克,循环数组 props=new Props(30,30);//没有实际意义,为了new对象,必须要有个参数? if(ss.equals("newGame")){ // record=new Record(); for(int i=0;i<tksl;i++){ DiTank dt=new DiTank((i)*a,b);//添加出场敌坦 // dt.dtkxl(dtk);///???是不是敌人坦克血量 dt.setFangxiang(1);//给一个初始值,调drawTank()赋初值要用 Thread t2=new Thread(dt); t2.start(); Zidan zd=new Zidan(dt.x,dt.y,1);//?这是干啥加子弹元素吗? Thread t3=new Thread(zd);//? t3.start(); dtk.add(dt); } }else if(ss.equals("goongame")){//继续游戏有问题 感觉读取存盘信息有问题 wzjh=Record.dupan(); for(int i=0;i<wzjh.size();i++){ Weizhi wz=wzjh.get(i); DiTank dt=new DiTank(wz.x,wz.y);//添加出场敌坦 dt.setFangxiang(wz.fangxiang); // dt.dtkxl(dtk);//?敌坦克血量,好像暂时用不着 // dt.setFangxiang(1);//给一个初始值,调drawTank()赋初值要用 Thread t2=new Thread(dt); t2.start(); Zidan zd=new Zidan(dt.x,dt.y,1);//?这是干啥加子弹元素吗? Thread t3=new Thread(zd);//? t3.start(); dtk.add(dt); } } flag=false;//MyPanel类的mp创建过一次就标记为假 // this.repaint(); // Record.next(); // if(Record.next()%2!=0){ // Record.reMtNum();//需要吗? // Record.reDtNum();//需要吗? // Record.reAddMtNum(); // } } public void outNum(Graphics g)//画出统计数据的方法也即使显示数量的函数 { g.setColor(Color.cyan); this.drawTank(500,150,g,0,0);//引用drawtank()的不能是g,而是this this.drawTank(570,150,g,0,1); this.drawTank(500,70,g,0,1); g.setColor(Color.black); g.setFont(new Font("仿宋",2,20));//??换换字体效果 g.drawString(Record.getDtNum()+"",600,170); if((Record.getMtNum()+Record.getAddMtNum())>=0){ g.drawString((Record.getMtNum()+Record.getAddMtNum())+"",530,170);// }else{ g.drawString((Record.getAddMtNum())+"",530,170); } g.setColor(Color.blue); g.setFont(new Font("方正小标宋",1,17)); g.drawString("干掉的坦克总数:",510,40); g.setColor(Color.black); g.setFont(new Font("仿宋",2,20)); g.drawString(Record.getSumDtNum()+"",530,90); g.setColor(Color.MAGENTA);//设置颜色 g.setFont(new Font("隶书",0,20));//设置字体 g.drawString("第"+x+"关",500 , 200);//绘字符串 } public void paint(Graphics g){//这个方法每当窗口激活,最小化,调用repaint()方法都会运行,线程中调用就一直显示 super.paint(g); // g.fillRect(0,0,400,300);//做个背景画布,默认黑色 this.outNum(g);//调用显示数量的函数 g.setColor(Color.red);//设置颜色 g.fillRect(530, 210, 30, 20); g.setColor(Color.black);//设置颜色 g.drawLine(530, 210, 530, 320); g.setColor(mycolor11);//设置颜色 if(mt.live==true){ this.drawTank(mt.getX(),mt.getY(),g,mt.fangxiang,0); } if(mt0.live==true){ this.drawTank(mt0.getX(),mt0.getY(),g,mt0.fangxiang,2); } if(mt01.live==true){ this.drawTank(mt01.getX(),mt01.getY(),g,mt01.fangxiang,2); } if(mt02.live==true){ this.drawTank(mt02.getX(),mt02.getY(),g,mt02.fangxiang,2); } if(mt.getLive()==false){ g.setColor(mycolor11);//设置颜色 g.setFont(new Font("Gill Sans Ultra Bold Condensed",1,40));//字体:华康楷体, Ravie, OCR A Extended g.drawString("game over...",200 , 220);//绘字符串 this.repaint(); } if(Record.getDtNum()%6==0&&(Record.getDtNum()>10)){ // if(time%2==0) // { g.setColor(Color.blue);//设置颜色 g.setFont(new Font("华文行楷",1,35));//字体:华康楷体, Ravie, OCR A Extended g.drawString("你行不行?",310 , 265);//绘字符串 // } } if(Record.getDtNum()==0){ g.setColor(Color.red);//设置颜色 g.setFont(new Font("华文行楷",1,35));//字体:华康楷体, Ravie, OCR A Extended g.drawString("过关!",300 , 265);//绘字符串 } for(int i=0;i<dtk.size();i++)//画敌人坦克asd { DiTank dt=dtk.get(i); if(dt.live==true){ this.drawTank(dt.getX(),dt.getY(),g,dt.fangxiang,1);//??!!注意用法用dtk 还是dt调用 } } for(int i=0;i<mt.aa.size();i++)//画我的子弹 { Zidan zd=mt.aa.get(i); if(mt.zd!=null&&mt.zd.live==true) //???画子弹的条件 { //g.fill3DRect((mt.zd.x-2),(mt.zd.y-2), 8, 8, false); //???画子弹火力圈 g.setColor(Color.black);//子弹颜色设置为白色 g.fillOval(zd.x+1,zd.y+1, 4,4); } if(zd.live==false) { mt.aa.remove(zd); } } //this.repaint();//? for(int i=0;i<dtk.size();i++)//画敌人的子弹 { DiTank dt=dtk.get(i); for(int j=0;j<dt.dzd.size();j++) { Zidan zd=dt.dzd.get(j); if(zd!=null&&dtk.get(i).live==true) { g.setColor(Color.red);//子弹颜色设置为红色,次处不进循环是不是更好? g.fillOval(zd.x+1,zd.y+1, 4,4); } if(zd.live==false)//删除生命为假的敌人子弹???? { dt.dzd.remove(zd); } } } for(int i=0;i<bzjh.size();i++) //画爆炸 { Baozha bz=bzjh.get(i); if(bzjh.get(i).livetime>140){ g.setColor(Color.red); g.fillOval(bz.x, bz.y+5, 20,20 );//代替上面的句子 //g.fillOval(bz.x, bz.y, 20,5 );//可以用来做合成图形,但是要定好坐标点 }else if((bzjh.get(i).livetime<=100)&&(bzjh.get(i).livetime>50)){ g.setColor(Color.orange); g.fillOval(bz.x+4, bz.y+9, 12,12 ); }else if((bzjh.get(i).livetime<=50)&&(bzjh.get(i).livetime>20)){ g.setColor(Color.yellow); g.fillOval(bz.x+7, bz.y+11,5,5 ); }else{ g.setColor(Color.pink); g.fillOval(bz.x+10, bz.y+13,2,2 ); } bz.ltjs(); //生存时间减少函数 if(bz.livetime==0){ bzjh.remove(bz); } } // if(props.live==true){//画道具 this.drawProps(props.getX(),props.getY(),g,props.getleixing()); } //} this.repaint();//教学视频少了这句,子弹无法自主运行,主类启动线程后仍然可动 } public void keyPressed(KeyEvent e)//键盘输入事件 { if(mt.getLive()==true){ if(e.getKeyCode()==KeyEvent.VK_W){ this.mt.setFangxiang(0); this.mt.xiangshang(); }else if(e.getKeyCode()==KeyEvent.VK_S){ this.mt.setFangxiang(1); this.mt.xiangxia(); }else if(e.getKeyCode()==KeyEvent.VK_A){ this.mt.setFangxiang(2); this.mt.xiangzuo(); }else if(e.getKeyCode()==KeyEvent.VK_D){ this.mt.setFangxiang(3); this.mt.xiangyou(); } if(e.getKeyCode()==KeyEvent.VK_J) { if((mt.aa.size()<myzdNum)&&(mt.live==true))//子弹设置最多 myzdNum 发 { this.mt.fszd();//调用发射子弹函数 } } } } public void crash(){ } public boolean addprops(Props props,MyTank mt)//吃道具触发 方法 (道具功能触发模型为边长20的正方形) { boolean b2=false; switch(props.leixing){ case 0://我的坦克速度提高//mt.fangxiang 0\1\2\3 if((mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15<props.getY()+20&&mt.getY()+15>props.getY())||(mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15>props.getY()&&mt.getY()+15<props.getY()+20)||(mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15>props.getY()&&mt.getY()+15<props.getY()+20)||(mt.getX()+15>props.getX()&&mt.getX()+15<props.getX()+20&&mt.getY()+10>props.getY()&&mt.getY()+10<props.getY()+20)){ props.live=false; mt.sudu=20; b2=true; } break; case 1://效果回到出生地 if((mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15<props.getY()+20&&mt.getY()+15>props.getY())||(mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15>props.getY()&&mt.getY()+15<props.getY()+20)||(mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15>props.getY()&&mt.getY()+15<props.getY()+20)||(mt.getX()+15>props.getX()&&mt.getX()+15<props.getX()+20&&mt.getY()+10>props.getY()&&mt.getY()+10<props.getY()+20)){ props.live=false; mt.setX(630); mt.setY(280); b2=true; } break; case 2://提高我可以发射的子弹数目 //mt.fangxiang 0\1\2\3 if((mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15<props.getY()+20&&mt.getY()+15>props.getY())||(mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15>props.getY()&&mt.getY()+15<props.getY()+20)||(mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15>props.getY()&&mt.getY()+15<props.getY()+20)||(mt.getX()+15>props.getX()&&mt.getX()+15<props.getX()+20&&mt.getY()+10>props.getY()&&mt.getY()+10<props.getY()+20)){ props.live=false; this.myzdNum=30; this.huopao=1; this.n=4; b2=true; } break; case 3://显示的敌人坦克全死,但实际效果是..是不出敌方坦克了!!!! if((mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15<props.getY()+20&&mt.getY()+15>props.getY())||(mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15>props.getY()&&mt.getY()+15<props.getY()+20)||(mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15>props.getY()&&mt.getY()+15<props.getY()+20)||(mt.getX()+15>props.getX()&&mt.getX()+15<props.getX()+20&&mt.getY()+10>props.getY()&&mt.getY()+10<props.getY()+20)){ props.live=false; for(int i=0;i<dtk.size();i++){ if(dtk.get(i).live==true){ dtk.get(i).live=false; Record.setDtNum();//有几个活坦克生命变假,就累计几辆dtNum } } b1=true; b2=true; } break; case 4://吃道具加命 if((mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15<props.getY()+20&&mt.getY()+15>props.getY())||(mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15>props.getY()&&mt.getY()+15<props.getY()+20)||(mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15>props.getY()&&mt.getY()+15<props.getY()+20)||(mt.getX()+15>props.getX()&&mt.getX()+15<props.getX()+20&&mt.getY()+10>props.getY()&&mt.getY()+10<props.getY()+20)){ props.live=false; Record.setAddMtNum(); b2=true; // System.out.println("吃道具加命程序,正常运行"); } break; } return b2; } // addMyTank++; //MyTank mt1=new MyTank(mt.getX(),mt.getY());//??创建另一个MyTank对象 // public void setAddMytank(){ // addMyTank++; // }; // public static int getAddMytank(){ // return addMyTank; // }; public void run() //我的画板的 线程函数 { while(true){ try{ Thread.sleep(50);// }catch(Exception e){} for(int i=0;i<mt.aa.size();i++)//我的子弹集中敌坦克的线程 { Zidan myzd=mt.aa.get(i); if(myzd.live){ for(int j=0;j<dtk.size();j++){ DiTank dt=dtk.get(j); // Zidan zd=dt.dzd.get(j);//为啥dzd可以直接用,不用创建// ||(b1==true&&Record.getDtNum()>0) if(dt.live)//内关联敌人坦克重生的一种情况,有敌人坦克被打中 { if(this.jzsf(myzd,dt)&&((Record.getDtNum()-tksl)>=0)){//调用jzsf(),打中同时,坦克定点?及时重生 DiTank dt0=new DiTank((int)(Math.random()*50+5)*10,(int)(Math.random()*100+450)); Thread t2=new Thread(dt0); t2.start(); Zidan zd0=new Zidan(dt0.x,dt0.y,dt0.fangxiang); Thread t3=new Thread(zd0); t3.start(); dt0.dzd.add(zd0); dtk.add(dt0); } } } } } if(Record.getDtNum()>=tksl&&b1==true){ //炸弹爆炸,敌坦克按条件重生, for(int i=0;i<tksl;i++){ DiTank dt1=new DiTank((int)(Math.random()*20)*10,(int)(Math.random()*100+450)); Thread t6=new Thread(dt1); t6.start(); Zidan zd1=new Zidan(dt1.x,dt1.y,dt1.fangxiang); Thread t7=new Thread(zd1); t7.start(); dt1.dzd.add(zd1); dtk.add(dt1); } b1=false; } if((Record.getDtNum()==(tksl-1))&&(b1==true)){ for(int i=0;i<tksl-1;i++){ DiTank dt1=new DiTank((int)(Math.random()*20)*10,(int)(Math.random()*100+450)); Thread t6=new Thread(dt1); t6.start(); Zidan zd1=new Zidan(dt1.x,dt1.y,dt1.fangxiang); Thread t7=new Thread(zd1); t7.start(); dt1.dzd.add(zd1); dtk.add(dt1); } b1=false; } if((Record.getDtNum()==(tksl-2))&&(b1==true)){ // for(int i=0;i<tksl-1;i++){ DiTank dt1=new DiTank((int)(Math.random()*20)*10,(int)(Math.random()*100+450)); Thread t6=new Thread(dt1); t6.start(); Zidan zd1=new Zidan(dt1.x,dt1.y,dt1.fangxiang); Thread t7=new Thread(zd1); t7.start(); dt1.dzd.add(zd1); dtk.add(dt1); b1=false; } for(int j=0;j<dtk.size();j++)//敌人的子弹击中我的坦克的线程 { DiTank dt=dtk.get(j);//取出所有敌方坦克 for(int i=0;i<dt.dzd.size();i++) { Zidan zd=dt.dzd.get(i);//? if(zd.live) { if(this.jzsf(zd,mt)==true){//调用 击中敌坦 函数 } } } } if((this.time%120)==0){//6秒发生1次 道具随机重置//draw mt hit props props.live=true; // props.leixing=2; props.leixing=(int)(Math.random()*propsSort); props.x=(int)(Math.random()*370); props.y=(int)(Math.random()*270); props.livetime=100;//道具生存期 } if(props.livetime>0){//道具生存期变化 props.livetime--; }else{ props.live=false; } if(mt.live==true&&props.live==true){//调用 吃道具 方法 this.addprops(props,mt); } time++; // if(SaveData.getSumDtNum()%20==0){ // Record.next(); // } this.repaint();//线程运行中重绘?? } } public void jzwf()//敌人子弹集中我方坦克的方法 { for(int i=0;i<this.dtk.size();i++){ DiTank dt=dtk.get(i); for(int j=0;j<dt.dzd.size();j++){ Zidan zd=dt.dzd.get(j); this.jzsf(zd, mt); } } } public void jzdf() //我的子弹击中坦克的方法 { for(int i=0;i<mt.aa.size();i++){ Zidan zd=mt.aa.get(i);//从我的子弹集合类取我的各个子弹 if(zd.live==true){ for(int j=0;j<dtk.size();j++){ DiTank dt=dtk.get(j);//从敌坦克集合类取出各个敌坦克 if(dt.live){ this.jzsf(zd,dt); // levelDtNum--; } } } this.repaint(); } } public boolean jzsf(Zidan zd,Tank tk)//击中双方的方法 { boolean b2=false; switch(tk.fangxiang) { case 0: case 1: if(zd.x>tk.x&&zd.x<tk.x+20&&zd.y>tk.y&&zd.y<tk.y+30)//分辨率判断? { if(tk instanceof DiTank){//只改这就实现 判断tk是不是DiTank的实例 Record.setDtNum(); Record.setSumDtNum(); // Record.setAddMtNum(); tk.live=false; b2=true; }else{ // System.out.println("Record.getMtNum()="+Record.getMtNum()); Record.setMtNum();//Record.getSumMtNum()一直小于0 ?bug if(Record.getMtNum()+1<=0){ Record.lowAddMtNum(); } // System.out.println("Record.getMtNum()="+Record.getMtNum()); // System.out.println("Record.AddMtNum()="+Record.getAddMtNum()); if(Record.getMtNum()+Record.getAddMtNum()>0){//bug 被打一下就游戏结束 已经解决 mt.setX(140); mt.setY(232); } if(Record.getMtNum()+Record.getAddMtNum()<=0){ tk.live=false; } } zd.live=false; Baozha bz=new Baozha(tk.x,tk.y); bzjh.add(bz); } break; case 2: case 3: if(zd.x>tk.x&&zd.x<tk.x+30&&zd.y>tk.y&&zd.y<tk.y+20){ if(tk instanceof DiTank){//只改这就实现 判断tk是不是DiTank的实例 Record.setDtNum();//每次敌人坦克数量-1 Record.setSumDtNum(); // Record.setAddMtNum(); tk.live=false; b2=true; }else{ // System.out.println("Record.getMtNum()="+Record.getMtNum()); Record.setMtNum();//Record.getSumMtNum()一直小于0 ?bug if(Record.getMtNum()+1<=0){ Record.lowAddMtNum(); } // System.out.println("Record.getMtNum()="+Record.getMtNum()); // System.out.println("Record.AddMtNum()="+Record.getAddMtNum()); if(Record.getMtNum()+Record.getAddMtNum()>0){//bug 被打一下就游戏结束 已经解决 mt.setX(550); mt.setY(270); } if(Record.getMtNum()+Record.getAddMtNum()<=0){ tk.live=false; } } zd.live=false; Baozha bz=new Baozha(tk.x,tk.y); bzjh.add(bz); } break; } return b2; } public void keyTyped(KeyEvent e){} public void keyReleased(KeyEvent e){} public void drawTank(int x,int y,Graphics g,int fangxiang,int leixing)//画坦克函数 { int m=10; //double n=1; switch(leixing)//不同阵营坦克 { case 0://我的坦克 g.setColor(Color.yellow);// 我的坦克颜色 黄色 // g.fillOval(170*huopao, 240*huopao, 30*huopao, 30*huopao); m=11; break; case 1://敌人的坦克 g.setColor(mycolor3);//敌人坦克颜色 蓝色 // m=15; break; case 2://玩家2的坦克 g.setColor(mycolor1);//敌人坦克颜色 绿色 break; } switch(fangxiang)//不同方向的坦克(0,1,2,3)分别代表上下左右,中心原点不变做坐标变换 { case 0://上 g.fill3DRect(x,y,5,30,true); g.fill3DRect(x+15,y,5,30,true); g.fill3DRect(x+5,y+5,10,20,true); g.drawLine(x+10,y-5,x+10,(y+10)); g.setColor(Color.black); g.fillOval(x+5,y+10,10,10); break; case 1://下 g.fill3DRect(x,y,5,30,true); g.fill3DRect(x+15,y,5,30,true); g.fill3DRect(x+5,y+5,10,20,true); g.drawLine(x+10,y+10,x+10,(y+35)); g.setColor(Color.black); g.fillOval(x+5,y+10,10,10); break; case 2://左 g.fill3DRect(x-5,y+5,30,5,true); g.fill3DRect(x-5,y+20,30,5,true); g.fill3DRect(x,y+10,20,10,true); g.drawLine((x-10)+n-m,y+15,(x+10),(y+15)); g.setColor(Color.black); g.fillOval(x+5,y+10,10,10); break; case 3://右 g.fill3DRect(x-5,y+5,30,5,true); g.fill3DRect(x-5,y+20,30,5,true); g.fill3DRect(x,y+10,20,10,true); g.drawLine((x+10)-n+m,y+15,(x+30),(y+15)); g.setColor(Color.black); g.fillOval(x+5,y+10,10,10); break; } } public void drawProps(int x,int y,Graphics g,int leixing)//画道具 { if(time%8==0){ switch(leixing) { case 0://画车轮对应坦克加速 g.setColor(Color.white); g.fillOval(x, y, 21, 21); g.setColor(Color.black); g.fillOval(x+2,y+2,16,16); g.setColor(Color.white); g.drawOval(x+2,y+2,16,16); g.drawLine(x+2,y+10,x+18,y+10); g.drawLine(x+10,y+2,x+10,y+18); g.drawLine(x+16,y+4,x+4,y+16); g.drawLine(x+4,y+4,x+16,y+16); break; case 1://画回出生地道具图标 g.setColor(Color.white); g.drawRoundRect(x, y, 20, 20, 5, 5); g.setColor(mycolor3); g.fillRoundRect(x+5, y+5, 10, 10, 5, 5); break; case 2://画增加子弹数目道具//? g.setColor(mycolor2); g.fill3DRect(x-15,y+8,30,5,false); g.fill3DRect(x-15,y+6,10,10,true); g.fillOval(x+15,y+7,7,7); break; case 3://画炸弹 g.setColor(mycolor2); g.fillRect(x, y, 21, 21); g.setColor(Color.black); g.fillRect(x+8,y+6,6,2); g.fillOval(x+3,y+7,14,14); g.drawLine(x+11, y+3, x+11, y+6); g.setColor(Color.white); g.drawLine(x+11, y+15, x+8, y+14); break; case 4://画小坦克道具 g.setColor(Color.yellow); g.fill3DRect(x,y,20,3,true); g.fill3DRect(x,y+10,20,3,true); g.fill3DRect(x+3,y+3,14,7,false); g.fillOval(x+6,y+3,7,7); g.drawLine(x-7,y+6,x+7,y+6); break; } } } } }
Java 如何配置echart 的 option的多个grid
Java如果调用echart的API配置同一个option里设置多个grid 像这样 grid: [         {x: '5%', y: '5%', width: '40%', height: '16%'},         {x: '60%', y: '5%', width: '40%', height: '16%'},         {x: '5%', y: '35%', width: '40%', height: '16%'},         {x: '60%', y: '35%', width: '40%', height: '16%'},        {x: '5%', y: '85%', width: '40%', height: '16%'},         {x: '60%', y: '85%', width: '40%', height: '16%'}     ], 如果设置多个option.grid()方法则会覆盖之前的,如果设置多个x,y的值也是会覆盖之前的,不知道怎么设置,求救
linux 安装openjdk8后配置了环境变量,运行javac,为什么提示"Command 'javac' not found" ?
我在终端(ubuntu19.10)用 sudo install openjdk安装的jdk 然后用 gedit /etc/profile 在文件末尾增加了几行: ``` export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH ``` (我的jdk安装目录是/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java) 之后保存并source /etc/profile,然后reboot, 输入javac,就出现了如题的问题,求救。。。
大一新生妹子求救:求2的100万次方
求2的100万次方的值,不能使用java中的系统函数,这两天急用,关乎到进项目组锻炼的机会,谢谢大家了。
求救:cdh旧版本的pacel无法激活
在把cloudera manager和cdh从5.2.0升级到5.7.5后,现在想把cdh从5.7.5回退到5.2.0, 可是在激活pacel5.2.0版本的时候报错,错误信息如下:org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of com.cloudera.cmf.model.ParcelServicesRestartInfo out of START_ARRAY token at [Source: java.io.StringReader@3699bc13; line: 1, column: 1]。 然后日志没有任何错误显示。cloudera-scm-server 日志信息如下: 2017-02-23 16:20:27,528 INFO 1904297772@scm-web-1566:com.cloudera.parcel.components.ParcelManagerImpl: Determined obsoleted releases ( DbRelease{id=2, product=CDH, version=5.7.5-1.cdh5.7.5.p0.3} ) if release DbRelease{id=1, product=CDH, version=5.2.0-1.cdh5.2.0.p0.36} is activated. ![图片说明](https://img-ask.csdn.net/upload/201702/24/1487900609_651281.png) ![图片说明](https://img-ask.csdn.net/upload/201702/24/1487900630_385030.png)
求救:苹果mac电脑,文件夹误操作,文件夹中文件部分丢失
求救:苹果mac电脑,文件夹误操作,首先我移动文件夹到废纸篓,过程中,然后又按了CTRL+Z取消移动,速度比较慢,然后我直接关机了,现在问题是文件夹在,但是文件夹里面的文件不在了,废纸篓找回的只有一部分,请大神们帮帮忙,给个找回的办法
坐等求救,java用ssh的时候,Gson解析json有外键的时候报错
解析json是用的gson,实体类涉及到三张表三个类,之间的关系是: C表的一个字段是外键,为A表的主键 C表的另一个字段是外键,为B表的主键 转json的时候报如下异常,该怎么做,请具体一点. 这是多对多的关系吧? java.lang.UnsupportedOperationException: Attempted to serialize java.lang.Class: org.hibernate.proxy.HibernateProxy. Forgot to register a type adapter? at com.google.gson.internal.bind.TypeAdapters$1.write(TypeAdapters.java:67) at com.google.gson.internal.bind.TypeAdapters$1.write(TypeAdapters.java:61) at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68) at com.google.gson.internal.bind.ArrayTypeAdapter.write(ArrayTypeAdapter.java:93) at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:89) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:195) at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:89) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:195) at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:89) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:195) at com.google.gson.internal.bind.ObjectTypeAdapter.write(ObjectTypeAdapter.java:107) at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68) at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:96) at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:60) at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:89) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:195) at com.google.gson.Gson.toJson(Gson.java:593) at com.google.gson.Gson.toJson(Gson.java:572) at com.google.gson.Gson.toJson(Gson.java:527) at com.chebeiyuan.utils.GsonUtil.objectToString(GsonUtil.java:29) at com.chebeiyuan.action.BaseAction.setResultJson(BaseAction.java:136) at com.chebeiyuan.action.BaseAction.setSuccessJson(BaseAction.java:149) at com.chebeiyuan.action.CarTypeAction.getUserCarList(CarTypeAction.java:51) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:441) at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:280) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:243) at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:165) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:252) at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:179) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:130) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:165) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:179) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52) at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:488) at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454) at java.lang.Thread.run(Thread.java:619)
PC桌面客户端开发求救
大家好。我想做一个基于C/S架构的远程视频监控系统。也就是说在电脑客户端就可以实时查看监控画面。但苦于我是机械专业,对电脑客户端开发不是很熟悉,有没有谁能告知WIN32开发的具体流程呢。能不能推荐一些学习网站。
求救!!!!!HessianProxy cannot connect to xxxxx
我们系统中调用了另一个系统的服务端的Hessian接口,调用正常没有问题,但是运行一段时候(一般为一天两天)后,报连接不上的错误。重启我们的系统应用之后又正常了,一段时候之后又报错。 查了资料这类报错一般都是url不对,这应该是一开始就报错才能归为url地址不对吧。真诡异…… **调用代码如下:** HessianProxyFactory f = new HessianProxyFactory(); f.setOverloadEnabled(true); f.setReadTimeout(10000L); f.setConnectTimeout(10000L); WfWechatHessianService wfWechatService = (WfWechatHessianService) f.create(WfWechatHessianService.class, url); WfWechartRequestInfo info = new WfWechartRequestInfo(); info.setCustNo(custListId); info.setRemark(remark); String requestJson = JSONObject.fromObject(info).toString(); RespInfo respInfo = wfWechatService.addWechart(requestJson); ``` ``` **报错日志:** [ ERROR] [2019-06-21 11:48:56] com.ec.nscs.exception.ExceptionHandle [25] [http-nio-8000-exec-9] - 系统异常{} com.caucho.hessian.client.HessianConnectionException: HessianProxy cannot connect to 'http://x.x.x.xxxx/xxxxService/WfWechatService at com.caucho.hessian.client.HessianURLConnection.sendRequest(HessianURLConnection.java:142) at com.caucho.hessian.client.HessianProxy.sendRequest(HessianProxy.java:296) at com.caucho.hessian.client.HessianProxy.invoke(HessianProxy.java:171) at com.sun.proxy.$Proxy188.addWechart(Unknown Source) at com.ec.nscs.controller.WwwwApplyController.WwwwApply(WwwwApplyController.java:83) at com.ec.nscs.controller.WwwwApplyController$$FastClassBySpringCGLIB$$a825dae8.invoke(<generated>) at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:720) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) at org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:52) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.aop.aspectj.AspectJAfterAdvice.invoke(AspectJAfterAdvice.java:47) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.aop.framework.adapter.AfterReturningAdviceInterceptor.invoke(AfterReturningAdviceInterceptor.java:52) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:655) at com.ec.nscs.controller.WwwwApplyController$$EnhancerBySpringCGLIB$$5b971647.WwwwApply(<generated>) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:114) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872) at javax.servlet.http.HttpServlet.service(HttpServlet.java:661) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) at javax.servlet.http.HttpServlet.service(HttpServlet.java:742) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:96) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:129) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at com.ec.nscs.filter.EscapeFilter.doFilter(EscapeFilter.java:41) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:89) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:496) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748) Caused by: java.io.FileNotFoundException: http://x.x.x.xxxx/xxxxService/WfWechatService at sun.reflect.GeneratedConstructorAccessor324.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at sun.net.www.protocol.http.HttpURLConnection$10.run(HttpURLConnection.java:1926) at sun.net.www.protocol.http.HttpURLConnection$10.run(HttpURLConnection.java:1921) at java.security.AccessController.doPrivileged(Native Method) at sun.net.www.protocol.http.HttpURLConnection.getChainedException(HttpURLConnection.java:1920) at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1490) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1474) at com.caucho.hessian.client.HessianURLConnection.sendRequest(HessianURLConnection.java:125) ... 82 common frames omitted Caused by: java.io.FileNotFoundException: http://x.x.x.xxxx/xxxxService/WfWechatService at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1872) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1474) at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480) at com.caucho.hessian.client.HessianURLConnection.sendRequest(HessianURLConnection.java:112) ... 82 common frames omitted
c# emgucv 获取外部摄像头(ip camera)
求教 如何用c# emgucv 获取同一网段内 外部摄像头 外部摄像头SDk已经有了 获取自己电脑摄像头已经实现 但是外部的找了好多方法都不行 Capture cap=new capture(index) 当index默认或者0就是默认摄像头 但是如何用这个函数去实现外部摄像头 求救
python蜜汁报错,简直太奇怪了,大佬求救~
直接上图 ![图片说明](https://img-ask.csdn.net/upload/202002/10/1581318058_899459.png) 前249个没问题,循环来的为什么最后一个就有问题? 最后一步不肯走报错了 然后我试了一下协程爬取: ``` from gevent import monkey monkey.patch_all() import requests,time,gevent from gevent.queue import Queue start=time.time() url_list={'https://www.baidu.com/', 'https://www.sina.com.cn/', 'http://www.sohu.com/', 'https://www.qq.com/', 'https://www.163.com/', 'http://www.iqiyi.com/', 'https://www.tmall.com/', 'http://www.ifeng.com/' } work=Queue() for url in url_list: work.put_nowait(url) def pa(): while not work.empty(): url=work.get_nowait() res=requests.get(url) print(url,work.qsize(),res.status_code) task_list=[] for i in range(2): task=gevent.spawn(pa) task_list.append(task) gevent.joinall(task_list) end=time.time() print(end-start) ``` 错误就一大堆了。 ![图片说明](https://img-ask.csdn.net/upload/202002/10/1581318289_401344.png) 简单的爬取就可以过: ``` import requests from bs4 import BeautifulSoup headers={'user-agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'} url='http://www.weather.com.cn/weather/101281905.shtml' res=requests.get(url,headers=headers) res.encoding='utf-8' bs=BeautifulSoup(res.text,'html.parser') lis=bs.find(class_='t clearfix').find_all('li') for li in lis: day=li.find('h1') how=li.find(class_='wea') num=li.find(class_='tem') print('日期:'+day.text+'\n天气:'+how.text+'\n温度:'+num.text+'\n---------------') ``` ![图片说明](https://img-ask.csdn.net/upload/202002/10/1581318440_49577.png) 已试,用selenium没发现问题 然而当我运行以下代码时: ``` from gevent import monkey monkey.patch_all() import gevent,requests, bs4, csv from gevent.queue import Queue work = Queue() url_1 = 'http://www.boohee.com/food/group/{type}?page={page}' for x in range(1, 4): for y in range(1, 4): real_url = url_1.format(type=x, page=y) work.put_nowait(real_url) url_2 = 'http://www.boohee.com/food/view_menu?page={page}' for x in range(1,4): real_url = url_2.format(page=x) work.put_nowait(real_url) print(work) ``` 结果是一片空 ![图片说明](https://img-ask.csdn.net/upload/202002/10/1581319419_795328.png)
小白求救:文件下载预览
java如何实现文件下载时预览文件,类似qq邮件那样的预览,图片预览
求救啊,这边有java web的同学么,这边下图可用datagrid么,怎么用,用什么比较好呢
![图片说明](https://img-ask.csdn.net/upload/201508/25/1440496191_269588.png)
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私有的数
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
Linux(服务器编程):15---两种高效的事件处理模式(reactor模式、proactor模式)
前言 同步I/O模型通常用于实现Reactor模式 异步I/O模型则用于实现Proactor模式 最后我们会使用同步I/O方式模拟出Proactor模式 一、Reactor模式 Reactor模式特点 它要求主线程(I/O处理单元)只负责监听文件描述符上是否有事件发生,有的话就立即将时间通知工作线程(逻辑单元)。除此之外,主线程不做任何其他实质性的工作 读写数据,接受新的连接,以及处...
阿里面试官问我:如何设计秒杀系统?我的回答让他比起大拇指
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图和个人联系方式,欢迎Star和指教 前言 Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸,打败了...
五年程序员记流水账式的自白。
不知觉已中码龄已突破五年,一路走来从起初铁憨憨到现在的十九线程序员,一路成长,虽然不能成为高工,但是也能挡下一面,从15年很火的android开始入坑,走过java、.Net、QT,目前仍处于android和.net交替开发中。 毕业到现在一共就职过两家公司,目前是第二家,公司算是半个创业公司,所以基本上都会身兼多职。比如不光要写代码,还要写软著、软著评测、线上线下客户对接需求收集...
C语言魔塔游戏
很早就很想写这个,今天终于写完了。 游戏截图: 编译环境: VS2017 游戏需要一些图片,如果有想要的或者对游戏有什么看法的可以加我的QQ 2985486630 讨论,如果暂时没有回应,可以在博客下方留言,到时候我会看到。 下面我来介绍一下游戏的主要功能和实现方式 首先是玩家的定义,使用结构体,这个名字是可以自己改变的 struct gamerole { char n
一文详尽系列之模型评估指标
点击上方“Datawhale”,选择“星标”公众号第一时间获取价值内容在机器学习领域通常会根据实际的业务场景拟定相应的不同的业务指标,针对不同机器学习问题如回归、分类、排...
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外...
压测学习总结(1)——高并发性能指标:QPS、TPS、RT、吞吐量详解
一、QPS,每秒查询 QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。互联网中,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。 二、TPS,每秒事务 TPS:是TransactionsPerSecond的缩写,也就是事务数/秒。它是软件测试结果的测量单位。一个事务是指一...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple/ 
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆  每天早上8:30推送 作者| Mr.K   编辑| Emma 来源| 技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯
程序员该看的几部电影
##1、骇客帝国(1999) 概念:在线/离线,递归,循环,矩阵等 剧情简介: 不久的将来,网络黑客尼奥对这个看似正常的现实世界产生了怀疑。 他结识了黑客崔妮蒂,并见到了黑客组织的首领墨菲斯。 墨菲斯告诉他,现实世界其实是由一个名叫“母体”的计算机人工智能系统控制,人们就像他们饲养的动物,没有自由和思想,而尼奥就是能够拯救人类的救世主。 可是,救赎之路从来都不会一帆风顺,到底哪里才是真实的世界?
Python绘图,圣诞树,花,爱心 | Turtle篇
每周每日,分享Python实战代码,入门资料,进阶资料,基础语法,爬虫,数据分析,web网站,机器学习,深度学习等等。 公众号回复【进群】沟通交流吧,QQ扫码进群学习吧 微信群 QQ群 1.画圣诞树 import turtle screen = turtle.Screen() screen.setup(800,600) circle = turtle.Turtle()...
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东
还记得那个提速8倍的IDEA插件吗?VS Code版本也发布啦!!
去年,阿里云发布了本地 IDE 插件 Cloud Toolkit,仅 IntelliJ IDEA 一个平台,就有 15 万以上的开发者进行了下载,体验了一键部署带来的开发便利。时隔一年的今天,阿里云正式发布了 Visual Studio Code 版本,全面覆盖前端开发者,帮助前端实现一键打包部署,让开发提速 8 倍。 VSCode 版本的插件,目前能做到什么? 安装插件之后,开发者可以立即体验...
破14亿,Python分析我国存在哪些人口危机!
2020年1月17日,国家统计局发布了2019年国民经济报告,报告中指出我国人口突破14亿。 猪哥的朋友圈被14亿人口刷屏,但是很多人并没有看到我国复杂的人口问题:老龄化、男女比例失衡、生育率下降、人口红利下降等。 今天我们就来分析一下我们国家的人口数据吧! 一、背景 1.人口突破14亿 2020年1月17日,国家统计局发布了 2019年国民经济报告 ,报告中指出:年末中国大陆总人口(包括31个
2019年除夕夜的有感而发
天气:小雨(加小雪) 温度:3摄氏度 空气:严重污染(399) 风向:北风 风力:微风 现在是除夕夜晚上十点钟,再有两个小时就要新的一年了; 首先要说的是我没患病,至少现在是没有患病;但是心情确像患了病一样沉重; 现在这个时刻应该大部分家庭都在看春晚吧,或许一家人团团圆圆的坐在一起,或许因为某些特殊原因而不能团圆;但不管是身在何处,身处什么境地,我都想对每一个人说一句:新年快乐! 不知道csdn这...
听说想当黑客的都玩过这个Monyer游戏(1~14攻略)
第零关 进入传送门开始第0关(游戏链接) 请点击链接进入第1关: 连接在左边→ ←连接在右边 看不到啊。。。。(只能看到一堆大佬做完的留名,也能看到菜鸡的我,在后面~~) 直接fn+f12吧 &lt;span&gt;连接在左边→&lt;/span&gt; &lt;a href="first.php"&gt;&lt;/a&gt; &lt;span&gt;←连接在右边&lt;/span&gt; o...
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ......
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!
2020年的1月,我辞掉了我的第一份工作
其实,这篇文章,我应该早点写的,毕竟现在已经2月份了。不过一些其它原因,或者是我的惰性、还有一些迷茫的念头,让自己迟迟没有试着写一点东西,记录下,或者说是总结下自己前3年的工作上的经历、学习的过程。 我自己知道的,在写自己的博客方面,我的文笔很一般,非技术类的文章不想去写;另外我又是一个还比较热衷于技术的人,而平常复杂一点的东西,如果想写文章写的清楚点,是需要足够...
别低估自己的直觉,也别高估自己的智商
所有群全部吵翻天,朋友圈全部沦陷,公众号疯狂转发。这两周没怎么发原创,只发新闻,可能有人注意到了。我不是懒,是文章写了却没发,因为大家的关注力始终在这次的疫情上面,发了也没人看。当然,我...
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。 再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。 下文是原回答,希望能对你能有所启发。 如果我说,这个世界上人真的分三六九等,...
节后首个工作日,企业们集体开晨会让钉钉挂了
By 超神经场景描述:昨天 2 月 3 日,是大部分城市号召远程工作的第一天,全国有接近 2 亿人在家开始远程办公,钉钉上也有超过 1000 万家企业活跃起来。关键词:十一出行 人脸...
Java基础知识点梳理
Java基础知识点梳理 摘要: 虽然已经在实际工作中经常与java打交道,但是一直没系统地对java这门语言进行梳理和总结,掌握的知识也比较零散。恰好利用这段时间重新认识下java,并对一些常见的语法和知识点做个总结与回顾,一方面为了加深印象,方便后面查阅,一方面为了学好java打下基础。 Java简介 java语言于1995年正式推出,最开始被命名为Oak语言,由James Gosling(詹姆
2020年全新Java学习路线图,含配套视频,学完即为中级Java程序员!!
新的一年来临,突如其来的疫情打破了平静的生活! 在家的你是否很无聊,如果无聊就来学习吧! 世上只有一种投资只赚不赔,那就是学习!!! 传智播客于2020年升级了Java学习线路图,硬核升级,免费放送! 学完你就是中级程序员,能更快一步找到工作! 一、Java基础 JavaSE基础是Java中级程序员的起点,是帮助你从小白到懂得编程的必经之路。 在Java基础板块中有6个子模块的学
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合
如何优雅地打印一个Java对象?
你好呀,我是沉默王二,一个和黄家驹一样身高,和刘德华一样颜值的程序员。虽然已经写了十多年的 Java 代码,但仍然觉得自己是个菜鸟(请允许我惭愧一下)。 在一个月黑风高的夜晚,我思前想后,觉得再也不能这么蹉跎下去了。于是痛下决心,准备通过输出的方式倒逼输入,以此来修炼自己的内功,从而进阶成为一名真正意义上的大神。与此同时,希望这些文章能够帮助到更多的读者,让大家在学习的路上不再寂寞、空虚和冷。 ...
相关热词 c# 为空 判断 委托 c#记事本颜色 c# 系统默认声音 js中调用c#方法参数 c#引入dll文件报错 c#根据名称实例化 c#从邮件服务器获取邮件 c# 保存文件夹 c#代码打包引用 c# 压缩效率
立即提问