失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > java 如何让程序一直运行的程序_java – 如何在程序结束前让方法在后台持续运行?...

java 如何让程序一直运行的程序_java – 如何在程序结束前让方法在后台持续运行?...

时间:2022-02-23 10:43:47

相关推荐

java 如何让程序一直运行的程序_java – 如何在程序结束前让方法在后台持续运行?...

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

对于前者假设我有一个方法“gravity()”,它在程序运行时不断递减某个值.

现在我尝试使用以下程序,其中我试图在没有按下按键的情况下向下拉公爵(重力).但是没有发生.

import java.awt.*;

import java.awt.event.*;

import java.awt.image.BufferedImage;

import java.io.IOException;

import .*;

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 = "/misc/Bullfight.jpg";

private static final String IMAGE_PATH_PLAYER = "/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 – 如何在程序结束前让方法在后台持续运行?...》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。