JAVA开发之弹球多线程问题

问题描述

我的代码实现不了重绘,请大家帮忙看看哈!importjava.awt.*;publicclassPrintTaskextendsJPanelimplementsRunnable//,MouseListener,MouseMotionListener{intnum;intn;inttype;RandomrandomNumber;longstart,end;intcolor1,color2,color3;intrandomX,randomY;intstartX,startY;intsumX,sumY;booleanover;Colorc;JButtonbtn;Threadthread[];MouseEventevent;ExecutorServiceexecutor;//JFrameframe;//PolygonsJPanelpolygonsJPanel;publicPrintTask(){JFrameframe=newJFrame("弹球");frame.setLayout(newBorderLayout());frame.add(btn,BorderLayout.NORTH);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);btn=newJButton("Start");//frame.add(polygonsJPanel);//addpolygonsJPaneltoframeframe.setSize(1280,650);//setframesizeframe.setVisible(true);frame.setResizable(false);randomNumber=newRandom();color1=randomNumber.nextInt(256);color2=randomNumber.nextInt(256);color3=randomNumber.nextInt(256);randomX=randomNumber.nextInt(15);randomY=randomNumber.nextInt(15);over=false;startX=600;startY=300;sumX=startX;sumY=startY;start=0;addMouseMotionListener(newMouseMotionAdapter(){publicvoidmouseMoved(MouseEvente){//TODOAuto-generatedmethodstubover=isOver(e.getX(),e.getY());}});/*Stringstr=JOptionPane.showInputDialog("Pleaseenterthenumberofballs");n=Integer.parseInt(str);btn.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventevent){thread=newThread[n];start=System.currentTimeMillis();for(inti=0;i<n;i++){thread[i]=newThread(newPrintTask());thread[i].start();}}});*/}booleanisOver(intx,inty){if(x!=sumX&&y!=sumY&&x!=1280&&y!=650){type=0;if(sumX>1280)type=1;if(sumX<0)type=2;if(sumY>650)type=3;if(sumY<0)type=4;switch(type){case0:{sumX+=randomX;sumY+=randomY;break;}case1:{sumX-=randomX;sumY+=randomY;break;}case2:{sumX=0;sumY+=randomY;break;}case3:{sumX+=randomX;sumY-=randomY;break;}case4:{sumX+=randomX;sumY=0;break;}default:break;}returnfalse;}returntrue;}publicvoidshowDlg(){Stringstr=JOptionPane.showInputDialog("Pleaseenterthenumberofballs");n=Integer.parseInt(str);btn.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventevent){thread=newThread[n];start=System.currentTimeMillis();for(inti=0;i<n;i++){thread[i]=newThread(newPrintTask());thread[i].start();}}});}publicvoidrun(){}{//frame=newJFrame("DrawingPolygons");//frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);PolygonsJPanelpolygonsJPanel=newPolygonsJPanel();//frame.add(polygonsJPanel);//addpolygonsJPaneltoframe//frame.setSize(1280,650);//setframesize//frame.setVisible(true);//画圆//setCursor(Toolkit.getDefaultToolkit().createCustomCursor(im,newPoint(15,15),"Slef"));executor=Executors.newFixedThreadPool(num);for(inti=0;i<num;i++){Runnableworker=newPrintTask();executor.execute(worker);}polygonsJPanel.repaint();try{Thread.sleep(200);}catch(InterruptedExceptione2){//TODOAuto-generatedcatchblocke2.printStackTrace();}executor.shutdown();//PrintTaskprintTask;n=1;while(!over){//printTask=newPrintTask();//paintComponent(newGraphics());//画圆try//休眠{Thread.sleep(50);}catch(InterruptedExceptionexception){System.out.println("Terminatedprematurelyduetointerruption");}//printTask.repaint();//重画polygonsJPanel.repaint();}//printTask.repaint();}*/classPolygonsJPanelextendsJPanel/*implementsMouseListener,MouseMotionListener*/{RandomrandomNumber;intround,color1,color2,color3;intrandomX,randomY;intstartX,startY;intsumX,sumY;Colorc;MouseEventevent;publicPolygonsJPanel(){randomNumber=newRandom();color1=randomNumber.nextInt(256);color2=randomNumber.nextInt(256);color3=randomNumber.nextInt(256);randomX=randomNumber.nextInt(15);randomY=randomNumber.nextInt(15);//startX=randomNumber.nextInt(1000);//startY=randomNumber.nextInt(600);startX=600;startY=300;sumX=startX;sumY=startY;}publicvoidpaintComponent(Graphicsg){//连续画圆super.paintComponent(g);//callsuperclass'spaintComponentc=newColor(color1,color2,color3);g.setColor(c);if(event.getX()!=sumX&&event.getY()!=sumY&&event.getX()!=1280&&event.getY()!=650){type=0;if(sumX>1280)type=1;if(sumX<0)type=2;if(sumY>650)type=3;if(sumY<0)type=4;switch(type){case0:{sumX+=randomX;sumY+=randomY;break;}case1:{sumX-=randomX;sumY+=randomY;break;}case2:{sumX=0;sumY+=randomY;break;}case3:{sumX+=randomX;sumY-=randomY;break;}case4:{sumX+=randomX;sumY=0;break;}default:break;}while(!over){g.translate(sumX,sumY);g.fillOval(randomX,randomY,30,30);n=1;}//else{end=System.currentTimeMillis();JOptionPane.showMessageDialog(null,"游戏已结束,本次游戏共持续"+(end-start)+",欢迎下次再来!","游戏结束",JOptionPane.INFORMATION_MESSAGE);n=0;}}}}importjava.awt.*;publicclassThreadCreatorextendsJFrame{publicstaticvoidmain(String[]args){PrintTaska=newPrintTask();a.showDlg();}}

时间: 2024-09-28 07:13:30

JAVA开发之弹球多线程问题的相关文章

用JAVA开发CORBA应用实例

应用实例 文章摘要: 通用对象代理体系结构CORBA(Common Object Request Broker Architecture)是对象管理组织所定义的用来实现现今大量硬件.软件之间互操作的解决方案,CORBA也是迈向面向对象标准化和互操作的重要一步. -------------------------------------------------------------------------------- 正文: 用JAVA开发CORBA应用实例 通用对象代理体系结构CORBA(C

Java 程序中的多线程

程序|多线程 在Java程序中使用多线程要比在 C 或 C++ 中容易得多,这是因为 Java 编程语言提供了语言级的支持.本文通过简单的编程示例来说明 Java 程序中的多线程是多么直观.读完本文以后,用户应该能够编写简单的多线程程序. 为什么会排队等待? 下面的这个简单的 Java 程序完成四项不相关的任务.这样的程序有单个控制线程,控制在这四个任务之间线性地移动.此外,因为所需的资源 - 打印机.磁盘.数据库和显示屏 -- 由于硬件和软件的限制都有内在的潜伏时间,所以每项任务都包含

Java开发2.0: Kilim简介

一种用于实现 Java 并发性的角色框架 简介:并发编程是 Java 开发 2.0 的核心概念,但可能不是基于线程的并发性.Andrew Glover 解释为什么在多核系统中进行并发编程时,角色优于线程.他然后介绍 Kilim -- 一种基于角 色的消息传递框架,结合了并发编程和分布式编程. 对于软件开发人员而言,调试多线程应用程序中的非确定缺陷是最痛苦的工作.因此,像大多数人一 样,我钟爱使用 Erlang 和 Scala 等函数语言进行并发编程. Scala 和 Erlang 都采用了角色模

十四种Java开发工具点评

在计算机开发语言的历史中,从来没有哪种语言象Java那样受到如此众多厂商的支持,有如此多的开发工具,Java菜鸟们如初入大观园的刘姥姥,看花了眼,不知该何种选择.的确,这些工具各有所长,都没有绝对完美的,就算是老鸟也很难做出选择.在本文中我简要介绍了常见的十四种Java开发工具的特点,管中窥"器",希望能对大家有所帮助. 1.JDK (Java Development Kit) 2.Java Workshop 3.NetBeans 与Sun Java Studio 5 4.Borlan

白话阿里巴巴Java开发手册(编程规约)

最近,阿里巴巴发布了<阿里巴巴Java开发手册>,总结了阿里人多年一线实战中积累的研发流程规范,这些流程规范在一定程度上能够保证最终的项目交付质量,通过限制开发人员的编程风格.实现方式来避免研发人员在实践中容易犯的错误,同样的问题大家使用同样的模式解决,便于后期维护和扩展,确保最终在大规模协作的项目中达成既定目标. 无独有偶,笔者去年在公司里负责升级和制定研发流程.设计模板.设计标准.代码标准等规范,并在实际工作中进行了应用和推广,收效颇丰,也总结了适合支付平台的技术规范,由于阿里巴巴Java

阿里巴巴 Java 开发手册之编程规约(一)-------我的经验

阿里巴巴 Java 开发手册 一.编程规约 (一) 命名规约 1.[强制] 代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束.(代码规范,易读) 反例: name / __name / $Object / name / name$ / Object$ 2.[强制] 代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式. 说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧义.注意,即使纯拼音命名方式 也要避免采用.(代码规范,易读) 反例: DaZhePr

阿里巴巴Java开发手册快速学习

Java作为一门名副其实的工业级语言,语法友好,学习简单,大规模的应用给代码质量的管控带来了困难,特别是团队开发中,开发过程中的规范会直接影响最终项目的稳定性. 善医者"未有形而除之",提高工程健壮性最好的方式是在代码出现问题之前就排除掉,不给Bug出现的机会.一份好的开发规范就可以起到这样的作用,大大减少产品上线后的问题.  <阿里巴巴Java开发手册>是阿里巴巴的内部编码规范,阿里官方的Java代码规范标准, 手册以Java应用开发为维度,分为编程规约.异常日志规约.M

阿里巴巴 JAVA 开发手册

阿里巴巴 JAVA 开发手册 1.0.0 阿里巴巴集团技术部 2016.12.7 首次向 Java 业界公开 一. 编程规约(一) 命名规约1. [强制]所有编程相关命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束.反例: _name / __name / $Object / name_ / name$ / Object$2. [强制]所有编程相关的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式.说明: 正确的英文拼写和语法可以让阅读者易于理解,避免歧义.注意, 即使

《Java 开发从入门到精通》—— 导读

前言 从你开始学习编程的那一刻起,就注定了以后所要走的路:从编程学习者开始,依次经历实习生.程序员.软件工程师.架构师.CTO等职位的磨砺:当你站在职位顶峰的位置蓦然回首,会发现自己的成功并不是偶然,在程序员的成长之路上会有不断修改代码.寻找并解决Bug.不停地测试程序和修改项目的经历:不可否认的是,只要你在自己的开发生涯中稳扎稳打,并且善于总结和学习,最终将会得到可喜的收获. 选择一本合适的书 对于一名想从事程序开发的初学者来说,究竟如何学习才能提高自己的开发技术呢?其一的答案就是买一本合适的