生成所需的packtest.jar文件,双击就可以运行。如果默认打开方式不是javaw.exe那么可以指定打开方式为javaw.exe,也可以写一个bat文件,如run.bat,输入:java -jar packtest.jar ,并放置到与packtest.jar同一目录下。
//*******************************Tools.java**************************************
/**
* Copy Right Information : 转载或引用请保留此信息--飘飘白云
* Project : PackTest
* JDK version used : jdk1.4.2
* Version : 1.0.0
* Created By : kesalin@hotmail.com
* Created date : 2006-6-1 15:47:08
* Discription :
* Modification history
*
**/
package com.test;
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.net.URL;
import java.net.URLClassLoader;
import javax.imageio.ImageIO;
public class Tools
{
/**
* 创建缓冲图片
*
* @param w
* @param h
* @return
*/
public static Image createBufferedImage(int w, int h) {
//创建
BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
//清屏
Graphics g = bi.getGraphics();
g.setColor(Color.BLACK);
g.fillRect(0, 0, w, h);
g.dispose();
return bi;
}
/**
* @param comp
* @param fileName 图像的相对路径文件名字
* @return image
*/
public static Image getImage(Component comp,String fileName)
{
URLClassLoader urlLoader = (URLClassLoader)comp.getClass().getClassLoader();
URL url = urlLoader.findResource(fileName);
Image image = Toolkit.getDefaultToolkit().getImage(url);
MediaTracker mediatracker = new MediaTracker(comp);
try {
mediatracker.addImage(image, 0);
mediatracker.waitForID(0);
} catch (InterruptedException _ex) {
System.out.println("#Error#Tools->getImage():" + fileName +" failed."+_ex);
image = null;
}
if (mediatracker.isErrorID(0)) {
image = null;
}
return image;
}
/**
* @param comp
* @param fileName 图像的相对路径文件名字
* @return
*/
public static BufferedImage getBufferedImage(Component comp, String fileName)
{
BufferedImage bi = null;
try {
URLClassLoader urlLoader = (URLClassLoader) comp.getClass().getClassLoader();
bi = ImageIO.read(urlLoader.getResourceAsStream(fileName));
} catch (Exception e) {
e.printStackTrace();
}
return bi;
}
}
//*********************PackTest.java***********************************
package com.test;
public class PackTest
{
public static void main(String[] args) {
MainFrame packTest = new MainFrame("Java游戏应用程序框架及各种运行方法");
packTest.show();
}
}
//********************MainFrame.java
package com.test;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
public class MainFrame extends JFrame implements Runnable
{
// 系统相关
public Graphics2D g2d;
public Image bufferImage;// 双缓冲
private JDesktopPane desktop;
GraphicsEnvironment ge = null;
GraphicsDevice gd = null;
private boolean isFullScreen = false;// 全屏标志
private boolean isAppExit = false;// 应用程序结束标志
private int sleepTime = 10;
// 显示相关的属性
private int displayModeWidth;// 屏幕水平分辨率
private int displayModeHeight;
private int gameWidth = 1024;//游戏屏幕宽度
private int gameHeight = 768;
// 主线程
private Thread mainThread;
// 时间处理
private long curT;
// FPS control
public int fps;
public long fpsT;
public int fpsC = 0;
public static final int FPS_SEQU = 1; // FPS_SEQU 秒更新一下fps
public static final int FPS_EXP = 7;
public static final int FPS_EXP_FLOAT = 2;
public static final int SLEEPTIME_ADJUST = 2;
public static final int SLEEPTIME_MIN = 5;
public static final int SLEEPTIME_MAX = 30;
// 资源变量
Image ballon = null;
BufferedImage house = null;
/**
* 构造函数
* @param title
*/
public MainFrame(String title) {
super(title);
setDefaultCloseOperation(EXIT_ON_CLOSE);// 关闭应用程序
// 初始化JFrame
initJFrame();
processKeyEvent();
// 启动应用程序
start();
}
/**
* 初始化JFrame
*/
public void initJFrame() {
// 取得GraphicsDevice,在某些集成显卡上可能不能工作
ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
gd = ge.getDefaultScreenDevice();
// 取得显示分辨率的大小
displayModeWidth = gd.getDisplayMode().getWidth();
displayModeHeight = gd.getDisplayMode().getHeight();
// 设置应用程序窗口大小
setSize(gameWidth, gameHeight);
// 创建双缓冲
bufferImage = Tools.createBufferedImage( gameWidth, gameHeight);
g2d = (Graphics2D)bufferImage.getGraphics();
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
desktop = new JDesktopPane();
getContentPane().add(desktop);
}
/**
* 处理切换全屏按键事件
*/
private void processKeyEvent()
{
// 如果支持全屏
if( gd.isFullScreenSupported() )
{
addKeyListener( new KeyListener() {
public void keyTyped(KeyEvent e) {
}
public void keyPressed(KeyEvent e) {
// 按escape键退出全屏
if( e.getKeyCode() == KeyEvent.VK_ESCAPE ) {
if( isFullScreen ) {
isFullScreen = false;
changeScreenSize();
}
}
// 按F键进入全屏
else if( e.getKeyCode() == KeyEvent.VK_F ) {
if( !isFullScreen ) {
isFullScreen = true;
changeScreenSize();
}
}
}
public void keyReleased(KeyEvent e) {
}
}) ;
}
}
public void paint(Graphics g ) {
if( isFullScreen )
g.drawImage(bufferImage,0,0,displayModeWidth,displayModeHeight,this);
else
g.drawImage(bufferImage,0,0,gameWidth,gameHeight,this);
}
/**
* 切换全屏,并重画
*/
public void changeScreenSize() {
if( isFullScreen ) {
dispose();
setUndecorated(true);// 隐藏JFrame上的Title bar
gd.setFullScreenWindow(this);
show();
}
else {
dispose();
gd.setFullScreenWindow(null);
setUndecorated(false);
this.setResizable(false);
show();
}
}
/**
* 更新刷新频率
*/
private void updateFPS() {
// FPS control
if( (fpsT + FPS_SEQU * 1000) > curT ){
fpsC ++;
}
else {
fps = fpsC / FPS_SEQU;
fpsT = curT;
fpsC = 0;
// 调整FPS
if( fps < FPS_EXP - FPS_EXP_FLOAT ){
if( sleepTime > SLEEPTIME_MIN )
sleepTime -= SLEEPTIME_ADJUST;
}
else if( fps > FPS_EXP + FPS_EXP_FLOAT ){
if( sleepTime < SLEEPTIME_MAX )
sleepTime += SLEEPTIME_ADJUST;
}
}
}
/**
* 启动主线程
*/
public void start() {
// 启动主线程
mainThread = new Thread(this);
mainThread.start();
}
public void run()
{
gameInit();
for(;!isAppExit;)
{
curT = System.currentTimeMillis();
updateFPS();
gameMain();
gameDraw();
repaint();
try {
Thread.sleep(sleepTime);
} catch (InterruptedException e) {
System.out.println("#Error#MainFrame->gcWait():" + e);
}
}
if( isAppExit ) {
this.dispose();
}
}
/**
* 初始化应用程序
*/
public void gameInit() {
}
/**
* 游戏主逻辑处理
*/
public void gameMain() {
if( ballon == null ) {
ballon = Tools.getImage(this,"res/images/ballon.png");
}
if( house == null ) {
house = Tools.getBufferedImage(this,"res/images/house.png");
}
}
/**
* 游戏描绘处理
*/
public void gameDraw() {
g2d.drawImage(ballon,0,0,this);
g2d.drawImage(house,0,ballon.getHeight(null),this);
}
}
<全文完>