我想知道,如何让方法在后台运行.即.程序启动时会启动此方法并继续执行其语句,直到程序关闭.

对于前者假设我有一个方法“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. 让程序在服务器后台持续运行

    让程序在服务器后台持续运行 1.安装screen CentOS系列: yum install screen Ubuntu系列: sudo apt-get install screen 2.创建scre ...

  2. 腾讯云-轻量应用服务器部署Springboot项目+后台持续运行

    目录 一.准备工作 1.1 服务器 1.2 本地Springboot项目 1.3 用到的工具 二.上传本地数据库 2.1 转储sql文件 2.2 导入sql文件到服务器数据库 三.修改项目配置文件 3 ...

  3. java在程序运行过程中_Java内存管理-程序运行过程(一)

    做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 勿在浮沙筑高台,出来混迟早要还的. 相信在做Java开发的伙伴一定知道 JVM(Java Virtual Machine( ...

  4. java怎样将乘法优化成位移乘法_Java性能优化:程序优化

    现在计算机的处理性能越来越好,加上JDK升级对一些代码的优化,在代码层针对一些细节进行调整可能看不到性能的明显提升, 但是我觉得在开发中注意这些,更多的是可以保持一种性能优先的意识,对一些敲代码时间比 ...

  5. 让linux后台持续运行某个程序

    一般情况下关闭终端时,那么在这个终端中启动的后台程序也会终止,要使终端关闭后,后台程序保持执行,使用这个指令: nohup 命令 & nohup yourcommand > myout. ...

  6. 微信小程序支付返回签名错误_java 微信小程序微信支付统一下订单及数字签名错误问题(后端)...

    今天来分享一下之前做微信小程序微信支付遇到的一些坑,博主这里是微信小程序支付功能,因此选择的微信支付方式是JSAPI支付方式(温馨提示左下角有音乐哦). 首先我们肯定是要在小程序后台绑定一个商户号的, ...

  7. java 同步 实例_Java 1.4同步:仅允许方法的一个实例运行(非...

    使用某种形式的锁定机制仅在尚未执行任务时执行它.获取锁定令牌必须是一个一步的过程.看到: /** * @author McDowell */ public abstract class Nonconc ...

  8. linux启动jar后运行其他命令,Linux 部署jar 后台持续运行

    一.短暂运行命令:java -jar xxx项目-0.0.1-SNAPSHOT.jar; 说明: 1.关闭服务器连接时会关闭此程序进程. 2.日志输出到控制台了,且当 ctrl+c 时,线程就终止了, ...

  9. java找出一组数据缺少最小数组_Java获取一维数组的最小值实现方法

    编写程序,实现接受用户在文本框中输入的单行数据.这些数据都是整数数字,以空格进行分隔,空格数量不限.并将这些数据分割成一维数组,再从数组中提取最小值显示在界面中.思路是先对用户的输入进行验证,即先用t ...

最新文章

  1. ASP.NET 2.0 X64的奇怪问题
  2. 【学习笔记1】CentOS 下载
  3. 【AI视野·今日CV 计算机视觉论文速览 第211期】Wed, 2 Jun 2021
  4. syslinux引导扇区不支持ntfs文件系统_磁盘与文件系统
  5. 个人笔记本电脑属于专用计算机吗,计算机选择题
  6. eclipse中文乱码解决_Stata15:一次性转码,解决中文乱码问题
  7. 网络视频流 -- ffmpeg 推流
  8. DCSTFN(使用深度卷积网络融合高时空遥感图像)
  9. flask-SQLAlchemy数据库密码加密
  10. Android 修改AlertDialog原生setPositiveButton的字体颜色背景颜色大小边距位置
  11. 回传速率和测量带宽及两者之间的联系
  12. Nacos的配置及使用--windows
  13. php+flash头像上传组件
  14. VS2022写Qt代码遇到的问题之 C2504 “xxx”: 未定义基类 (编译源文件
  15. Docker 的 镜像的常用命令
  16. 马克思主义基本原理概论——导论
  17. C语言实战105例源码
  18. 数据库应用系统功能设计与实施
  19. 关于guzzleHttp的基础操作
  20. android开源日历app,CalendarView

热门文章

  1. 页面背景图尺寸不随浏览器缩放而变化
  2. android蓝牙设置特征属性,Android BLE蓝牙详细解读(二)
  3. 步进电机 高速光耦_干货!伺服电机和步进电机的31个技术问答
  4. 电平转换电路_RS232电平和TTL电平有什么不同?如何转换?
  5. tp5 聚合max获取不到string最大值_深入理解Kafka客户端之如何获取集群元数据
  6. windows环境下安装zookeeper教程详解(单机版)
  7. navicat复制表字段
  8. decimal(10,2) 的含义
  9. Android开发笔记(一百三十八)文本输入布局TextInputLayout
  10. Android开发笔记(六十六)自定义对话框