java 如何让程序一直运行的程序_java – 如何在程序结束前让方法在后台持续运行?...
我想知道,如何让方法在后台运行.即.程序启动时会启动此方法并继续执行其语句,直到程序关闭.
对于前者假设我有一个方法“gravity()”,它在程序运行时不断递减某个值.
现在我尝试使用以下程序,其中我试图在没有按下按键的情况下向下拉公爵(重力).但是没有发生.
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.*;
import java.util.HashMap;
import java.util.Map;
import javax.imageio.ImageIO;
import javax.swing.*;
public class MoveIcon extends JPanel {
private static final long serialVersionUID = 1L;
private static final String IMAGE_PATH = "http://duke.kenai.com/misc/Bullfight.jpg";
private static final String IMAGE_PATH_PLAYER = "http://duke.kenai.com/iconSized/duke4.gif";
public static final int STEP = 3;
private static final int TIMER_DELAY = STEP * 8;
private BufferedImage bkgrndImage = null;
private BufferedImage playerImage = null;
private Map directionMap = new HashMap();
private int playerX = 0;
private int playerY = 0;
enum Direction {
UP(KeyEvent.VK_UP, 0, -1), DOWN(KeyEvent.VK_DOWN, 0, 1),
LEFT(KeyEvent.VK_LEFT, -1, 0), RIGHT(KeyEvent.VK_RIGHT, 1, 0);
private int keyCode;
private int xDirection;
private int yDirection;
private Direction(int keyCode, int xDirection, int yDirection) {
this.keyCode = keyCode;
this.xDirection = xDirection;
this.yDirection = yDirection;
}
public int getKeyCode() {
return keyCode;
}
public int getXDirection() {
return xDirection;
}
public int getYDirection() {
return yDirection;
}
}
public MoveIcon() {
try {
URL bkgrdImageURL = new URL(IMAGE_PATH);
URL playerImageURL = new URL(IMAGE_PATH_PLAYER);
bkgrndImage = ImageIO.read(bkgrdImageURL);
playerImage = ImageIO.read(playerImageURL);
setPreferredSize(new Dimension(bkgrndImage.getWidth(), bkgrndImage.getHeight()));
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
for (Direction direction : Direction.values()) {
directionMap.put(direction, false);
}
setKeyBindings();
Timer timer = new Timer(TIMER_DELAY, new TimerListener());
timer.start();
}
private void setKeyBindings() {
InputMap inMap = getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
ActionMap actMap = getActionMap();
for (final Direction direction : Direction.values()) {
KeyStroke pressed = KeyStroke.getKeyStroke(direction.getKeyCode(), 0, false);
KeyStroke released = KeyStroke.getKeyStroke(direction.getKeyCode(), 0, true);
inMap.put(pressed, direction.toString() + "pressed");
inMap.put(released, direction.toString() + "released");
actMap.put(direction.toString() + "pressed", new AbstractAction() {
private static final long serialVersionUID = 1L;
@Override
public void actionPerformed(ActionEvent e) {
directionMap.put(direction, true);
}
});
actMap.put(direction.toString() + "released", new AbstractAction() {
private static final long serialVersionUID = 1L;
@Override
public void actionPerformed(ActionEvent e) {
directionMap.put(direction, false);
}
});
}
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (bkgrndImage != null) {
g.drawImage(bkgrndImage, 0, 0, null);
}
if (playerImage != null) {
g.drawImage(playerImage, playerX, playerY, null);
}
}
private class TimerListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
boolean moved = false;
for (Direction direction : Direction.values()) {
if (directionMap.get(direction)) {
playerX += STEP * direction.getXDirection();
playerY += STEP * direction.getYDirection();
moved = true;
}
}
if (moved) {
int x = playerX - 2 * STEP;
int y = playerY - 2 * STEP;
int w = playerImage.getWidth() + 4 * STEP;
int h = playerImage.getHeight() + 4 * STEP;
MoveIcon.this.repaint(x, y, w, h); // !! repaint just the player
}
}
}
private static void createAndShowUI() {
JFrame frame = new JFrame("MoveIcon");
frame.getContentPane().add(new MoveIcon());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
createAndShowUI();
}
});
}
}
谢谢.
java 如何让程序一直运行的程序_java – 如何在程序结束前让方法在后台持续运行?...相关推荐
- 让程序在服务器后台持续运行
让程序在服务器后台持续运行 1.安装screen CentOS系列: yum install screen Ubuntu系列: sudo apt-get install screen 2.创建scre ...
- 腾讯云-轻量应用服务器部署Springboot项目+后台持续运行
目录 一.准备工作 1.1 服务器 1.2 本地Springboot项目 1.3 用到的工具 二.上传本地数据库 2.1 转储sql文件 2.2 导入sql文件到服务器数据库 三.修改项目配置文件 3 ...
- java在程序运行过程中_Java内存管理-程序运行过程(一)
做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 勿在浮沙筑高台,出来混迟早要还的. 相信在做Java开发的伙伴一定知道 JVM(Java Virtual Machine( ...
- java怎样将乘法优化成位移乘法_Java性能优化:程序优化
现在计算机的处理性能越来越好,加上JDK升级对一些代码的优化,在代码层针对一些细节进行调整可能看不到性能的明显提升, 但是我觉得在开发中注意这些,更多的是可以保持一种性能优先的意识,对一些敲代码时间比 ...
- 让linux后台持续运行某个程序
一般情况下关闭终端时,那么在这个终端中启动的后台程序也会终止,要使终端关闭后,后台程序保持执行,使用这个指令: nohup 命令 & nohup yourcommand > myout. ...
- 微信小程序支付返回签名错误_java 微信小程序微信支付统一下订单及数字签名错误问题(后端)...
今天来分享一下之前做微信小程序微信支付遇到的一些坑,博主这里是微信小程序支付功能,因此选择的微信支付方式是JSAPI支付方式(温馨提示左下角有音乐哦). 首先我们肯定是要在小程序后台绑定一个商户号的, ...
- java 同步 实例_Java 1.4同步:仅允许方法的一个实例运行(非...
使用某种形式的锁定机制仅在尚未执行任务时执行它.获取锁定令牌必须是一个一步的过程.看到: /** * @author McDowell */ public abstract class Nonconc ...
- linux启动jar后运行其他命令,Linux 部署jar 后台持续运行
一.短暂运行命令:java -jar xxx项目-0.0.1-SNAPSHOT.jar; 说明: 1.关闭服务器连接时会关闭此程序进程. 2.日志输出到控制台了,且当 ctrl+c 时,线程就终止了, ...
- java找出一组数据缺少最小数组_Java获取一维数组的最小值实现方法
编写程序,实现接受用户在文本框中输入的单行数据.这些数据都是整数数字,以空格进行分隔,空格数量不限.并将这些数据分割成一维数组,再从数组中提取最小值显示在界面中.思路是先对用户的输入进行验证,即先用t ...
最新文章
- ASP.NET 2.0 X64的奇怪问题
- 【学习笔记1】CentOS 下载
- 【AI视野·今日CV 计算机视觉论文速览 第211期】Wed, 2 Jun 2021
- syslinux引导扇区不支持ntfs文件系统_磁盘与文件系统
- 个人笔记本电脑属于专用计算机吗,计算机选择题
- eclipse中文乱码解决_Stata15:一次性转码,解决中文乱码问题
- 网络视频流 -- ffmpeg 推流
- DCSTFN(使用深度卷积网络融合高时空遥感图像)
- flask-SQLAlchemy数据库密码加密
- Android 修改AlertDialog原生setPositiveButton的字体颜色背景颜色大小边距位置
- 回传速率和测量带宽及两者之间的联系
- Nacos的配置及使用--windows
- php+flash头像上传组件
- VS2022写Qt代码遇到的问题之 C2504 “xxx”: 未定义基类 (编译源文件
- Docker 的 镜像的常用命令
- 马克思主义基本原理概论——导论
- C语言实战105例源码
- 数据库应用系统功能设计与实施
- 关于guzzleHttp的基础操作
- android开源日历app,CalendarView
热门文章
- 页面背景图尺寸不随浏览器缩放而变化
- android蓝牙设置特征属性,Android BLE蓝牙详细解读(二)
- 步进电机 高速光耦_干货!伺服电机和步进电机的31个技术问答
- 电平转换电路_RS232电平和TTL电平有什么不同?如何转换?
- tp5 聚合max获取不到string最大值_深入理解Kafka客户端之如何获取集群元数据
- windows环境下安装zookeeper教程详解(单机版)
- navicat复制表字段
- decimal(10,2) 的含义
- Android开发笔记(一百三十八)文本输入布局TextInputLayout
- Android开发笔记(六十六)自定义对话框