java jpanel继承的线程在别的类里面怎么控制
RT我在写一个小游戏,其中有一个计时器功能,计数器类专门接了Runnable,问题是我在主界面类jframe里加入了计时器jpanel,可是时间缺没办法控制,如果再jpa...
RT 我在写一个小游戏,其中有一个计时器功能,计数器类专门接了Runnable,问题是我在主界面类jframe里加入了计时器jpanel,可是时间缺没办法控制,如果再jpanel类里面启动了线程 时间就会一直走不停,总之主界面类无法控制jpanel里面线程。。。我面向对象是自学的 所以估计问题出在我这里,代码贴后面
package cg;
import java.awt.Font;
import java.awt.Graphics;
import javax.swing.JPanel;
public class Cg1 extends JPanel implements Runnable{
static Thread tim;
int h=0,s=0,m=0;
Cg1(){
if(tim==null)
{
tim=new Thread(this);
tim.start();
}
}
public void paint(Graphics g){
super.paint(g);//先继承他祖宗的所有本事
g.setFont(new Font("Times New Roman",0,24));
String timeInfo="";
if(h<=9)
timeInfo+="0"+h+":";
else
timeInfo+=h+":";
if(m<=9)
timeInfo+="0"+m+":";
else
timeInfo+=m+":";
if(s<=9)
timeInfo+="0"+s;
else
timeInfo+=s;
g.drawString(timeInfo, 30, 40);
}
public static void main(String[] args) {
}
public void run()
{
while(true)
{
this.repaint();
try
{
Thread.sleep(1000);
s++;
}
catch(InterruptedException e)
{
e.printStackTrace();
}
}
}
}
由于坑爹的字数限制 长话短说
中间的画布是些在public class Cg1 extends JPanel implements Runnable
主界面是public class Cg2 extends JFrame implements ActionListener
主界面的按钮 如何控制到 Cg1里面的线程而且让时间跑起来 展开
package cg;
import java.awt.Font;
import java.awt.Graphics;
import javax.swing.JPanel;
public class Cg1 extends JPanel implements Runnable{
static Thread tim;
int h=0,s=0,m=0;
Cg1(){
if(tim==null)
{
tim=new Thread(this);
tim.start();
}
}
public void paint(Graphics g){
super.paint(g);//先继承他祖宗的所有本事
g.setFont(new Font("Times New Roman",0,24));
String timeInfo="";
if(h<=9)
timeInfo+="0"+h+":";
else
timeInfo+=h+":";
if(m<=9)
timeInfo+="0"+m+":";
else
timeInfo+=m+":";
if(s<=9)
timeInfo+="0"+s;
else
timeInfo+=s;
g.drawString(timeInfo, 30, 40);
}
public static void main(String[] args) {
}
public void run()
{
while(true)
{
this.repaint();
try
{
Thread.sleep(1000);
s++;
}
catch(InterruptedException e)
{
e.printStackTrace();
}
}
}
}
由于坑爹的字数限制 长话短说
中间的画布是些在public class Cg1 extends JPanel implements Runnable
主界面是public class Cg2 extends JFrame implements ActionListener
主界面的按钮 如何控制到 Cg1里面的线程而且让时间跑起来 展开
展开全部
// 心跳包发送计时器
private static final Map<String, Timer> timer;
static {
users = new HashMap<String, WebSocketSession>();
timer = new HashMap<String, Timer>();
}
/**
* @ClassName: MyTimerTask 内部类
* @Description: 创建一个心跳包 防止socket超时掉线 为了确保链接畅通,服务器定时向客户端发送心跳数据
* 客户端做出判断,如果超出时间没收到心跳数据就说明连接断开了
*
* @date 2015-2-27 下午3:43:42
*
*/
class MyTimerTask extends TimerTask {
private WebSocketSession session;
public MyTimerTask(WebSocketSession session) {
this.session = session;
}
@Override
public void run() {
try {
if (session.isOpen()) {
String msg = "heartbeat_info";
System.out.println("当前资源量 " + users.size());
this.session.sendMessage(new TextMessage(msg.toString()));
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
//给你看看我的计时器吧,每个线程创建一个单独的计时器 用map来控制计时器
private static final Map<String, Timer> timer;
static {
users = new HashMap<String, WebSocketSession>();
timer = new HashMap<String, Timer>();
}
/**
* @ClassName: MyTimerTask 内部类
* @Description: 创建一个心跳包 防止socket超时掉线 为了确保链接畅通,服务器定时向客户端发送心跳数据
* 客户端做出判断,如果超出时间没收到心跳数据就说明连接断开了
*
* @date 2015-2-27 下午3:43:42
*
*/
class MyTimerTask extends TimerTask {
private WebSocketSession session;
public MyTimerTask(WebSocketSession session) {
this.session = session;
}
@Override
public void run() {
try {
if (session.isOpen()) {
String msg = "heartbeat_info";
System.out.println("当前资源量 " + users.size());
this.session.sendMessage(new TextMessage(msg.toString()));
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
//给你看看我的计时器吧,每个线程创建一个单独的计时器 用map来控制计时器
更多追问追答
追问
你这个很厉害!我前面没写清楚,我的计时器的意思是在主程序左下角有一个时间,从游戏开始00:00:00开始走 然后游戏结束就停计时,并且弹出对话框告诉玩家花了多少时间赢得游戏。。。。。。可是我在主界面里用过Runnable了,在计时器类里面接了Runnable以后控制不了线程,也就是一启动时间就走不停一直到程序结束才能停,急死我了
追答
你用TimerTask 这个类啊,继承他,重写run方法,你查查api,我这里贴出来还不如你自己查一下
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询