eclipse - Java Swing program slows down over time in Ubuntu -
so made solitaire game java swing. tested on windows , mac osx , worked fine. then, installed ubuntu on macbook pro, , when run ubuntu, works gradually slows down, slowing down computer itself. using java 8 openjdk, running eclipse (although running terminal results in same problem).
here code:
solitaire.java
package solitaire; import java.awt.event.keyevent; import java.awt.event.keylistener; import java.awt.event.mouseevent; import java.awt.image.bufferedimage; import java.io.file; import java.util.arraylist; import java.util.hashmap; import java.util.list; import java.util.map; import javax.imageio.imageio; import javax.swing.jframe; import javax.swing.event.mouseinputlistener; import cards.card; import cards.deck; public class solitaire extends jframe implements keylistener, mouseinputlistener { private static final long serialversionuid = -6358510224557653758l; public static solitaire app; public static map<card.suit,map<integer,bufferedimage>> cardimg; public static bufferedimage backface; public static int mx; public static int my; public static int dmx; public static int dmy; public static deck draw_pile; public static deck discard_pile; public static deck[] center_pile; public static deck[] ace_pile; public static deck deckdragged; public static list<card> dragged; public static boolean isdragged(card card) { (card drag : dragged) { if (card == drag) return true; } return false; } public void keytyped(keyevent e) { } public void keypressed(keyevent e) { } public void keyreleased(keyevent e) { } public void mouseclicked(mouseevent e) { } public void mousepressed(mouseevent e) { if (mx >= 642 && mx < 721 && >= 24 && < 147) { draw(); //repaint(); } else { //if (mx >= 24 && mx < 103 && >= 171 && < 294) { (int dn=0;dn<7;dn++) { deck deck = center_pile[dn]; boolean founddragged = false; (int cn=0;cn<deck.size();cn++) { card card = deck.card(cn); //deck.size()-cn-1); if (founddragged) dragged.add(card); else if (!card.flipped) { if (cn < deck.size()-1) { if (mx >= dn*103+24 && mx < (dn+1)*103 && >= cn*32+171 && < (cn+1)*32+171) { founddragged = true; deckdragged = deck; dragged.add(card); } } else { if (mx >= dn*103+24 && mx < (dn+1)*103 && >= cn*32+171 && < (cn+1)*32+262) { founddragged = true; deckdragged = deck; dragged.add(card); } } } } } (int dn=0;dn<4;dn++) { deck deck = ace_pile[dn]; if (deck.size() > 0) { if (mx >= dn*103+24 && mx < (dn+1)*103 && >= 24 && < 147) { deckdragged = deck; dragged.add(deck.last()); } } } if (discard_pile.size() > 0) { if (mx >= 539 && mx < 618 && >= 24 && < 147) { dragged.add(discard_pile.last()); deckdragged = discard_pile; } } //dragged.add(center_pile[0].first()); dmx = mx; dmy = my; } } public void mousereleased(mouseevent e) { if (dragged.size() > 0) { card dragfirst = dragged.get(0); (int dn=0;dn<7;dn++) { deck deck = center_pile[dn]; int s = deck.size(); //s = s == 0 ? 1 : s; card decklast = deck.last(); if (s > 0) { if (dragfirst.rank+1 == decklast.rank && dragfirst.red != decklast.red) { if (mx >= dn*103+24 && mx < (dn+1)*103 && >= (s-1)*32+171 && < s*32+262) { (card card : dragged) { deckdragged.cards.remove(card); deck.add(card); } dn = 7; } } } else if (dragfirst.rank().equals("king")) { if (mx >= dn*103+24 && mx < (dn+1)*103 && >= (s-1)*32+171 && < s*32+262) { (card card : dragged) { deckdragged.cards.remove(card); deck.add(card); } dn = 7; } } } if (dragged.size() == 1) { (int dn=0;dn<4;dn++) { deck deck = ace_pile[dn]; card decklast = deck.last(); if (mx >= dn*103+24 && mx < (dn+1)*103 && >= 24 && < 147) { if (deck.size() == 0) { if (dragfirst.rank().equals("ace")) { deckdragged.cards.remove(dragfirst); deck.add(dragfirst); } } else { if (dragfirst.rank-1 == decklast.rank && dragfirst.suit.equals(decklast.suit)) { deckdragged.cards.remove(dragfirst); deck.add(dragfirst); } } } } } (deck deck : center_pile) { if (deck.last() != null) deck.last().flipped = false; } } dragged = new arraylist<card>(); deckdragged = null; } public void mouseentered(mouseevent e) { } public void mouseexited(mouseevent e) { } public void mousedragged(mouseevent e) { mx = e.getx(); = e.gety()-25; //repaint(); } public void mousemoved(mouseevent e) { mx = e.getx(); = e.gety()-25; //repaint(); } public solitaire() { super(); bufferedimage cardsheet = null; try { cardsheet = imageio.read(new file("cards.png")); } catch (exception e) { e.printstacktrace(); } cardimg = new hashmap<card.suit,map<integer,bufferedimage>>(); card.suit[] suits = new card.suit[]{card.suit.clubs, card.suit.diamonds, card.suit.hearts, card.suit.spades}; (int y=0;y<5;y++) { if (y < 4) { cardimg.put(suits[y], new hashmap<integer,bufferedimage>()); (int x=0;x<13;x++) { cardimg.get(suits[y]).put(x+1,cardsheet.getsubimage(x*79, y*123, 79, 123)); } } else { backface = cardsheet.getsubimage(158, 492, 79, 123); } } draw_pile = new deck(cardimg, backface); draw_pile.fill(); draw_pile.flip(); draw_pile.shuffle(); discard_pile = new deck(cardimg, backface); center_pile = new deck[7]; ace_pile = new deck[4]; dragged = new arraylist<card>(); (int i=0;i<4;i++) { ace_pile[i] = new deck(cardimg, backface); } (int i=0;i<7;i++) { center_pile[i] = new deck(cardimg, backface); (int e=0;e<i+1;e++) { center_pile[i].add(draw_pile.draw()); if (e == i) center_pile[i].last().flip(); } } add(new board()); pack(); addkeylistener(this); addmouselistener(this); addmousemotionlistener(this); settitle("solitaire"); setdefaultcloseoperation(jframe.exit_on_close); setlocationrelativeto(null); } public void main() { boolean playing = true; while (playing) { repaint(); } } public void draw() { if (draw_pile.size() > 0) discard_pile.add(draw_pile.draw().flip()); else { draw_pile = discard_pile.flipcards().clone(); discard_pile.empty(); } } public static void main(string[] args) { app = new solitaire(); app.setvisible(true); app.main(); } }
board.java
package solitaire; import java.awt.dimension; import java.awt.graphics; import javax.swing.jpanel; import cards.card; import cards.deck; public class board extends jpanel { private static final long serialversionuid = -6536587208518567333l; public board() { setpreferredsize(new dimension(745, 702)); } public void paintcomponent(graphics g) { //center_pile starts @ y=171 (int dn=0;dn<7;dn++) { deck deck = solitaire.center_pile[dn]; (int cn=0;cn<deck.size();cn++) { card card = deck.card(cn); //deck.size()-cn-1); //if (dn == 0 && cn == 0 && card == solitaire.dragged) system.out.println("equals"); if (!solitaire.isdragged(card)) // g.drawimage(card.disp(), dn*103+24+(solitaire.mx-solitaire.dmx), cn*32+171+(solitaire.my-solitaire.dmy), null); // else g.drawimage(card.disp(), dn*103+24, cn*32+171, null); } } (int dn=0;dn<4;dn++) { deck deck = solitaire.ace_pile[dn]; g.drawroundrect(dn*103+22, 22, 82, 126, 7, 7); if (deck.size() > 0) { if (solitaire.deckdragged != deck) g.drawimage(deck.last().disp(), dn*103+24, 24, null); else if (deck.size() > 1) g.drawimage(deck.card(deck.size()-2).disp(), dn*103+24, 24, null); } } if (solitaire.draw_pile.size() > 0) g.drawimage(solitaire.backface, 642, 24, null); if (solitaire.discard_pile.size() > 0) { if (solitaire.deckdragged != solitaire.discard_pile) g.drawimage(solitaire.discard_pile.last().disp(), 539, 24, null); else if (solitaire.discard_pile.size() > 1) g.drawimage(solitaire.discard_pile.card(solitaire.discard_pile.size()-2).disp(), 539, 24, null); } if (solitaire.dragged.size() != 0) { (int i=0;i<solitaire.dragged.size();i++) { card card = solitaire.dragged.get(i); g.drawimage(card.disp(), solitaire.mx-40, solitaire.my-16+i*32, null); } } } }
the cards
package , classes in not related issue.
Comments
Post a Comment