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

Popular posts from this blog

java - Run spring boot application error: Cannot instantiate interface org.springframework.context.ApplicationListener -

reactjs - React router and this.props.children - how to pass state to this.props.children -

Excel VBA "Microsoft Windows Common Controls 6.0 (SP6)" Location Changes -