I"m new to Java and Stack Overflow, sorry if this is a bad question. So i created a Game in eclipse which is basically an animation with a key press jumping over other animations. I used Swing for my GUI, still new to them, and ran it in eclipse no worries. I decided to export it as a Runnable jar file to my Desktop, did so with out any hassles. The trouble begins when i open the Runnable Jar. The speed the animations play at are incredibly slow. I ran the Runnable jar on another pc with similar specs, I have a HP laptop with windows 10, and it ran fine. The Runnable jar sometimes runs at the correct speed and sometimes it doesn't, mostly doesn't, any help appreciated. my code:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
public class GB extends JPanel implements ActionListener, KeyListener {
/**
*
*/
private static final long serialVersionUID = 1L;
Timer timer = new Timer(5, this);
Timer jump = new Timer(16, null);
int x = 140;
int y = 240;
int roof = 60;
int vely =0;
int velx = 0;
int play;
int gamestate;
int blockstate;
int blockvel = 5;
int jumpstate = 1;
int count = 1;
int score;
int block1 =1600;
int block2 =2000;
int block3 =2500;
int block4 =2900;
int block5 =3300;
int block6 =3900;
int block7 =4350;
int block8 =4850;
int block9 =5350;
int casm;
int floor = 240;
boolean fall = false;
public GB() {
timer.start();
jump.start();
addKeyListener(this);
setFocusable(true);
setFocusTraversalKeysEnabled(false);
}
public void paintComponent(Graphics g) {
if(gamestate == 0){
super.paintComponent(g);
setBackground(Color.gray);
g.drawString("press enter to play", 500, 200);
}
if(gamestate == 1){
super.paintComponent(g);
g.drawString("Score =" + score, 50, 20);
setBackground(Color.gray);
g.setColor(Color.cyan);
g.fillRect(0, 270, 1500, 300);
if(play == 0 && gamestate == 1){
super.paintComponent(g);
setBackground(Color.gray);
g.setColor(Color.cyan);
g.fillRect(0, 270, 1500, 300);
g.setColor(Color.black);
g.drawString("Press Space to begin" , 500, 300);
g.drawString("Score =" + score, 50, 20);
}
if(gamestate == 1){
g.fillRect(block1,150,50,150);
g.fillRect(block2,150, 50, 150);
g.fillRect(block3,0,50,220);
g.fillRect(block4,150,50,150);
g.fillRect(block6, 150 , 50, 150);
g.fillRect(block7, 0, 50, 220);
g.fillRect(block9, 0, 50, 220);
g.setColor(Color.gray);
g.fillRect(block5, 240, 200, 300);
g.fillRect(block8, 240, 200, 300);
}
g.setColor(Color.black);
g.fillRect(x,y,30,30);
if(jumpstate == 2 ){
vely = -6;
if(y < roof ){
jumpstate = 3;
if (jumpstate == 3){
vely = 6;
jumpstate = 4;
}
}
}
if (y == floor && jumpstate == 4){
vely = 0;
jumpstate = 1;
}
if((x > block1 && x < block1 + 49) && y > 150){
gamestate = 2;
}
if((x > block2 && x < block2 + 49) && y > 150){
gamestate = 2;
}
if((x > block3 && x < block3 + 49) && y < 220){
gamestate = 2;
}
if((x > block4 && x < block4 + 49) && y > 150){
gamestate = 2;
}
if((x > block5 && x < block5 + 199) && (y == 240 && fall == false)){
fall = true;
if(fall == true){
vely = 6;
}
}
if((x > block6 && x < block6 + 49) && y > 150){
gamestate = 2;
}
if((x > block7 && x < block7 + 49) && y < 220){
gamestate = 2;
}
if((x > block8 && x < block8 + 199) && (y == 240 && fall == false)){
fall = true;
if(fall == true){
vely = 6;
}
}
if((x > block9 && x < block9 + 49) && y < 220){
gamestate = 2;
}
if (y > 500){
gamestate = 2;
}
if (gamestate == 2){
super.paintComponent(g);
vely = 0;
g.drawString("game over, your Score was:" + score + " Metres", 500, 200);
g.drawString("press r to play again" , 500, 225);
}
}
}
public void actionPerformed(ActionEvent e) {
if(gamestate == 1 && play == 1){
block1 = block1 - blockvel;
block2 = block2 - blockvel;
block3 = block3 - blockvel;
block4 = block4 - blockvel;
block5 = block5 - blockvel;
block6 = block6 - blockvel;
block7 = block7 - blockvel;
block8 = block8 - blockvel;
block9 = block9 - blockvel;
score = score + 1;
}
if(score == 2000){
blockvel = 7;
}
if(score == 5000){
blockvel = 9;
}
if(score == 7000){
blockvel = 11;
}
if (block1 < 0){
block1 = block9 + 500;
}
if (block2 < 0){
block2 = block1 + 500;
}
if (block3 < 0){
block3 = block2 + 500;
}
if (block4 < 0){
block4 = block3 + 500;
}
if (block5 < -200){
block5 = block4 + 500 ;
}
if (block6 < 0){
block6 = block5 + 500;
}
if (block7 < 0){
block7 = block6 + 500;
}
if (block8 < -200){
block8 = block7 + 500;
}
if (block9 < 0){
block9 = block8 + 500;
}
x = x + velx;
y = y + vely;
if( y < 60){
vely = 0;
}
//if( y > 240 ){
// vely = 0;
// }
repaint();
}
public void keyPressed(KeyEvent e) {
int code = e.getKeyCode();
if (code == KeyEvent.VK_SPACE ){
jumpstate = 2;
play = 1;
}
if (code == KeyEvent.VK_ENTER){
gamestate = 1;
blockstate = 1;
}
if(code == KeyEvent.VK_R){
gamestate = 0;
block1 = 1600;
block2 = 2000;
block3 = 2500;
block4 = 2900;
block5 = 3300;
block6 = 3900;
block7 = 4350;
block8 = 4850;
block9 = 5350;
vely = 0;
velx = 0;
y = 240;
x = 140;
play = 0;
score = 0;
blockvel = 5;
fall = false;
}
}
public void keyTyped(KeyEvent e) {}
public void keyReleased(KeyEvent e) {}
public static void main (String args[]){
JFrame Frame = new JFrame();
GB c = new GB();
Frame.add(c);
Frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Frame.setSize(1365,500);
Frame.setVisible(true);
Frame.setResizable(false);
}
}