Java Swing上的图形界面无法正常工作[重复]

Posted

技术标签:

【中文标题】Java Swing上的图形界面无法正常工作[重复]【英文标题】:Graphical Interface on Java Swing not working properly [duplicate] 【发布时间】:2022-01-23 21:22:03 【问题描述】:

帮助 Swing。 我会在您急需的时候来找您,我们将不胜感激。

我为一个大学项目用java创建了一个桌面游戏,现在我必须实现一个图形界面,我们必须使用swing来实现。

我在这里面临的问题是我无法通过简单地添加一个按钮和一个动作监听器来运行实际的游戏,实际运行游戏的类如下,

package diagrammedeclasse;

import java.util.*;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;
import com.modeliosoft.modelio.javadesigner.annotations.objid;

import diagrammedeclasse.IdentityCard.Identity;
import diagrammedeclasse.RumourCard.rumour;

@objid ("ca5d80b7-7525-40a8-a35d-128867e0e079")
public class Player  
    @objid ("db1ec2ea-ed45-4583-9835-29b566ac98e2")
    private String name;

    @objid ("956f1599-fada-4103-a41b-f39627d18dbe")
    private boolean isRevealed;

    @objid ("e023eaba-f6ba-4605-8d0e-7e7725d2cf0a")
    private int points;

    @objid ("88132cbd-f82b-4fa7-a075-3a43ad07ffdc")
    private boolean isWitch;

    @objid ("45b3c8e0-4313-4afe-9ed9-8df5132322e9")
    private boolean isVillager;
    
    private boolean isHuman;

    @objid ("fc187775-6ca3-4edb-a506-34fca14f59c0")
    private static int nombrejoueurs = 0;

    @objid ("f46be522-129a-43fb-b28f-ba42f46f4441")
    private int nbrebots;

    @objid ("d6656a4b-fc5f-4853-a503-892451396129")
    private static List<Player> players = new ArrayList<Player>();

    @objid ("09677697-75f5-4d0a-82af-16cb5ceb0e9f")
    private Strategy strategy;

    @objid ("733c2266-b1c2-46ed-ba09-cc9e5bc263a9")
    private Partie partie;

    @objid ("cf286f41-1aa5-4779-b094-b5f5b65bd2fe")
    private ArrayList<RumourCard> main;

    @objid ("21a4aa0a-ee12-4ad4-95b2-666a28109172")
    private ArrayList<RumourCard> carteJouee;

    @objid ("680477cf-5eee-4b60-9e4c-09e960c34158")
    public IdentityCard identityCard;
    private Player dernierjoueur;
    private int id;
    
    @objid ("49d924b4-d22c-42e6-b847-c388472720e5")
    public Player(String nom) 
        this.id=++Player.nombrejoueurs;
        this.carteJouee= new ArrayList<RumourCard>();
        this.name = nom;
        this.points=0;
        this.main=new ArrayList<RumourCard>();
        this.isVillager=false;
        this.isWitch=false;
        this.isHuman=true;
        this.isRevealed=false;
        this.identityCard=new IdentityCard(Identity.VILLAGER);
        this.partie=null;
        this.dernierjoueur=null;
        this.addPlayer(this);
            System.out.println("le joueur "+nom+" a ete cree");
            System.out.println("le joueur numero "+this.id);
    
    public void addPlayer(Player p1) 
        Player.players.add(p1);
    


    @objid ("bdef45fb-f512-412d-885a-36f4efe39d4a")
    public void ajouterBot() 
        System.out.println(Player.nombrejoueurs);
        int nbjou = Player.nombrejoueurs;
        Scanner sc= new Scanner(System.in);
        System.out.println("Nombre de bots :");
        for(int i=0;i<=6-nbjou;i++) 
                  System.out.println(i);
        nbrebots = sc.nextInt();
        int nbretotal = nbrebots + nbjou;
        if(nbretotal<3) nbrebots=3-nbjou;
        System.out.println("On ajoute " +nbrebots+" bots");
        Player.nombrejoueurs+=nbrebots;

    
    

//pour name (get;set)
    @objid ("17536045-28a2-433f-9afa-fdd0734154f8")
    public String getName() 
        return name;
    

    @objid ("3c175d47-6b75-429b-85f3-438939129a8b")
    public void setName(String value) 
        this.name = value;
    

//pour points (get;set)
    @objid ("c4617fa5-0e1b-4af3-8e83-af1d947e7381")
    public int getPoints() 
        return this.points;
    
    public int getId() 
        return this.id;
    

    
    @objid ("b13f6fa2-3d52-4bb1-92dd-58993b0f1b3b")
    public Player choisirjoueur() 
        Scanner sc= new Scanner(System.in);
        System.out.println("Choisissez un joueur :");
        int k=0;
        for(Player playe : this.partie.player) 
            if(playe.equals(this)) k++;
            else 
                System.out.println(k+1 +" : "+ playe.getName());
                k++;
            
        
               int selection = sc.nextInt();
               Player p1= partie.player.get(selection-1);
               System.out.println("joueur choisisser :"+p1.getName());
               return p1;
    
    public Player choisirjoueuraccuser() 
        Scanner sc= new Scanner(System.in);
        System.out.println("Choisissez un joueur :");
        int k=0;
        for(Player playe : this.partie.player) 
            if(playe.equals(this) || playe.isRevealed)k++;
            else 
                System.out.println(k+1 +" : "+ playe.getName());
                k++;
            
        
               int selection = sc.nextInt();
               Player p1= partie.player.get(selection-1);
               System.out.println("joueur choisisser :"+p1.getName());
               return p1;
    

    public Player choisirjoueurautre() 
        Player playerx=null;
        Scanner sc= new Scanner(System.in);
        System.out.println("Choisissez un joueur :");
        int k=0;
        for(Player playe : this.partie.player) 
            if(playe.equals(getdernierJoueur()) || playe.equals(this) || playe.isRevealed)k++;
            else 
                System.out.println(k+1 +" : "+ playe.getName());
                k++;
            
        
       
               int selection = sc.nextInt();
               System.out.println("joueur choisisser :"+ this.partie.player.get(selection-1).getName());
                playerx=  this.partie.player.get(selection-1);
               return playerx;
    

    @objid ("25e6de92-3f5b-4843-8179-8c02f40b390b")
    public void chooseUsername() 
        Scanner sc= new Scanner(System.in);
        System.out.println("Choose a username :");
        String nom = sc.nextLine();
                this.setName(nom);
    

  //methode pour choisir l'identite
    @objid ("c09b5791-ad90-4c49-b968-e838b203f08e")
    public void choisirIdentite() 
        int selection;
        Scanner input = new Scanner(System.in);
        
        System.out.println(this.getName()+" Choose from these choices");
        System.out.println("1 - Witch");
        System.out.println("2 - Villager");
        selection = input.nextInt();
        if(selection==1) 
            this.setIdentite(Identity.WITCH);
        
                if(selection==2) 
                    this.setIdentite(Identity.VILLAGER);
               
    
    //pour identityCard (get,set)
    @objid ("64524bab-e797-4b2c-8838-7826a384cf65")
    public void setIdentite(Identity newIdentity) 
        identityCard.setIdentity(newIdentity);
    

    @objid ("551eee99-17db-4dcf-bbb3-0e927c9eabd8")
    public Identity getIdentite() 
        return identityCard.getIdentity();
    

//methode pour reveler l'identite
    @objid ("638fdbf0-7639-40ab-9d5a-78f330080882")
    public void reveleridentite() 
        this.isRevealed = true;
        if (this.isWitch()) 
            Player p1=this;
        System.out.println(p1.getIdentite());
        this.partie.joueurHorsPartie(p1);
        
        else 
        System.out.println(this.getIdentite());
    
        
    public void reveleridentitesecretly() 
        System.out.println(this.getIdentite());
    
    
    public boolean revealedasVillager() 
        if(this.isRevealed() && this.isVillager()) return true;
        else return false;
    
    
    public void prenercarteJouee() 
        if(this.carteJouee.isEmpty()) 
            System.out.println(this.getName()+" Ce joueur n'a pas des cartes jouer");
        
        else 
        Scanner sc= new Scanner(System.in);
        System.out.println("Choisissez une carte des cartes jouees :");
        int i=0;
          Iterator<RumourCard> it = this.carteJouee.iterator();
           while(it.hasNext()) 
            System.out.println(i+1+" : "+it.next());  
            i++;
           
               int selection = sc.nextInt();
               System.out.println("Card jouee :"+this.carteJouee.get(selection-1));
               this.main.add(this.carteJouee.get(selection-1));
               this.carteJouee.remove(selection-1);
               System.out.println("Cette carte a ete ajoute a ton main");
        
    

    public void prendrandomcartede(Player p1) 
        if(p1.main.size()==0) 
            System.out.println(p1.getName()+" n'a plus des cartes dans son main ");
        
        else 
        Random random = new Random();
        int selection = random.nextInt(p1.main.size())+1;
        System.out.println("Choisissez une carte de :"+p1.getName());
               this.main.add(p1.main.get(selection-1));
               p1.main.remove(selection-1);
    
    

    @objid ("259b6cfd-b9c7-4e13-a815-36617fc647e3")
    public void prenerDiscardCard() 
        if(this.partie.getDiscardCards().size()==0)
        
            System.out.println("Il n'y a pas des discards cards");
        
        else 
        Scanner sc= new Scanner(System.in);
        System.out.println("Choisissez une carte de Discard Card :");
       int i=0;
          Iterator<RumourCard> it = this.partie.getDiscardCards().iterator();
           while(it.hasNext()) 
            System.out.println(i+1+" : "+it.next());  
           i++;
           
               int selection = sc.nextInt();
               this.main.add(this.partie.getDiscardCards().get(selection-1));
               System.out.println("Cette carte a ete ajoute a ton main :"+this.partie.getDiscardCards().get(selection-1));
               this.partie.getDiscardCards().remove(this.partie.getDiscardCards().get(selection-1));
        
    

    @objid ("77cc019a-c10d-47e9-9e07-2c550955ac23")
    public void ajouterDiscardCard() 
        if(this.main.isEmpty()) 
            System.out.println(this.getName()+" a aucune carte dans son main");
        else 
        Scanner sc= new Scanner(System.in);
        System.out.println("Choisissez une carte de ton main :");
       int i=0;
          Iterator<RumourCard> it = this.main.iterator();
           while(it.hasNext()) 
            System.out.println(i+1+" : "+it.next());  
           i++;
           
               int selection = sc.nextInt();
               System.out.println("Discard card :"+this.main.get(selection-1));
               this.partie.getDiscardCards().add(this.main.get(selection-1));
               this.main.remove(this.main.get(selection-1));
    
    
    
    public void ajouterDiscardCard(RumourCard c1) 
        
               System.out.println("Discard card :"+c1.getRumourCard());
               this.partie.getDiscardCards().add(c1);
               this.main.remove(c1);
    

    @objid ("c8fab12b-fd4d-400f-8999-022e719faf24")
    public void jouerCarte() 
        Player player1=this;
        int count=0;
        System.out.println("Choisissez une carte de ton main :");
          Iterator<RumourCard> it = this.main.iterator();
          int i =0 ;
           while(it.hasNext()) 
               RumourCard hey = it.next();
               if(!hey.jouablehunt(hey.getRumourCard(),player1)) count ++;
             System.out.println(i+1+" : "+hey);  
           i++;
           
           if(count==main.size()) 
               System.out.println(player1.getName()+" a aucune carte qui peut etre jouer maintenant");
               System.out.println("il doit accuser un joueur");
               player1.accuse();
           
           else 
           Scanner sc= new Scanner(System.in);
               int selection = sc.nextInt();
               System.out.println("Card jouee :"+this.main.get(selection-1));
               RumourCard rm = this.main.get(selection-1);
               if(rm.jouablehunt(rm.getRumourCard(),player1))
               
               this.carteJouee.add(rm);
               this.main.remove(rm);
               rm.useHunt( player1,rm.getRumourCard());
               
               else 
               
               System.out.println("Cette carte ne peut pas etre jouer maintenant");
            System.out.println("Choisir une autre carte de nouveau");
            player1.jouerCarte();
               
               
           
    
    
    public void jouerCarteaccuser() 
        Player player1=this;
        int count=0;
       
        System.out.println("Choisissez une carte de ton main :");
        int i=0;
          Iterator<RumourCard> it = this.main.iterator();
           while(it.hasNext()) 
               RumourCard hey = it.next();
               if(!hey.jouablewitch(hey.getRumourCard(),player1)) count ++;
             System.out.println(i+1+" : "+hey);  
           i++;
           
           if(count==main.size()) 
               System.out.println(player1.getName()+" a aucune carte qui peut etre jouer maintenant");
               System.out.println("il doit reveler son identite");
               player1.revelerIdentiteAfterAccusation(player1.getdernierJoueur());
           
           else 
               Scanner sc= new Scanner(System.in);
               int selection = sc.nextInt();
               System.out.println("Card jouee :"+this.main.get(selection-1));
               RumourCard rm = this.main.get(selection-1);
               if(rm.jouablewitch(rm.getRumourCard(),player1))
               
               this.carteJouee.add(rm);
               this.main.remove(rm);
               rm.useWitch(player1,rm.getRumourCard());     
               
               else 
               
               System.out.println("Cette carte ne peut pas etre jouer maintenant");
            System.out.println("Choisir une autre carte de nouveau");
            player1.jouerCarte();
               
               



//pour isRevealed (get)
    @objid ("f1371808-24e7-4ce0-8b41-861cee45b646")
    public boolean isRevealed() 
        return this.isRevealed;
    
    public void setisRevealed( boolean c1) 
       this.isRevealed=c1;
    

//pour isWitch (get)
    @objid ("e5581073-0e3a-49d9-9a1f-290bbc480a37")
    public boolean isWitch() 
        return this.getIdentite() == Identity.WITCH;
    
    
    public boolean isHuman() 
        return this.isHuman;
    


   public void setHuman(boolean isHuman) 
    this.isHuman = isHuman;


//for isVillager (get)
    @objid ("0b3c7a19-052a-4490-8b36-101d73759ddc")
    public boolean isVillager() 
        return this.getIdentite() ==Identity.VILLAGER;
    

//for main (get)
    @objid ("ca60f750-7879-4e5a-935f-933431e37748")
    public ArrayList<RumourCard> getMain() 
        return this.main;
    


//for carteJouee (get)
    @objid ("95bb5134-0dcd-4c28-8171-0c57a80eb878")
    public ArrayList<RumourCard> getcarteJouee() 
        return this.carteJouee;
    

//Methode pour ajouter des points
    @objid ("a264915c-9783-4165-b5f7-af5db30bf382")
    public void addPoints(int points) 
        this.points += points;
        System.out.println(this.getName()+" a gagner "+points+" points");
    
    public void subPoints(int points) 
        this.points -= points;
        System.out.println(this.getName()+" a perdu "+points+" points");
    
    
    public Partie getPartie() 
        return this.partie;
    
    public void setPartie(Partie partie) 
        this.partie=partie;
    

 public ArrayList<RumourCard> getDiscardedCards() 
     return this.partie.getDiscardCards();
     


    @objid ("4fc9c966-d181-4d8c-a7d1-29e726f50c63")
    public void revelerIdentiteAfterAccusation(Player accuser) 
        Player p1 = this;
          this.reveleridentite();
          if (p1.isWitch()) 
              accuser.addPoints(1);
               accuser.jouer();
           else 
              p1.jouer();
          
    
    
    
    public void accuse() 
        this.dernierJoueurs(this);
         joueraccuser(this);
    
    public void accuseautre() 
        joueraccuserautre(this);
   
    public void joueraccuserautre(Player accuser) 
        int k=0;
        for(Player playe : partie.player) 
            if(playe.equals(getdernierJoueur()) || playe.equals(accuser) || playe.isRevealed);
            else 
                k++;
            
        
        if(k==0) 
            System.out.println("C'est pas possible ");
            accuser.jouerCarte();
        
            else 
        Player acc = accuser.choisirjoueurautre();
        if(acc.isHuman) 
        if(acc.main.size()==0) 
            System.out.println("Tu n'as plus des cartes Rumour");
            System.out.println("Tu doit reveler ton identite");
            acc.revelerIdentiteAfterAccusation(accuser);
        
        else 
          Scanner sc= new Scanner(System.in);
          System.out.println("Joueur ACCUSE "+acc.getName()+" 1 si tu veux jouer une carte WITCH  ou 2 si tu veux reveler ton identite");
              System.out.println(1+" : Jouer carte avec effet Witch");  
              System.out.println(2+" : Reveler identite"); 
                 int selection = sc.nextInt();
                 if(selection==1) acc.jouerCarteaccuser(); 
                 if(selection==2) acc.revelerIdentiteAfterAccusation(accuser);
        
    else 
        Bots bot = (Bots)acc;
        bot.accuseautre(accuser, acc);
    
        
            
        

    @objid ("58706d4b-9e70-4ce5-9720-b5da656527d5")
    public void joueraccuser(Player accuser) 

        Player acc = accuser.choisirjoueuraccuser();
        if(acc.isHuman) 
            if(acc.main.size()==0) 
                System.out.println("Tu n'as plus des cartes Rumour");
                System.out.println("Tu doit reveler ton identite");
                acc.revelerIdentiteAfterAccusation(accuser);
            
        else 
              Scanner sc= new Scanner(System.in);
          System.out.println("Joueur ACCUSE "+acc.getName()+" 1 si tu veux jouer une carte WITCH  ou 2 si tu veux reveler ton identite");
              System.out.println(1+" : Jouer carte avec effet Witch");  
              System.out.println(2+" : Reveler identite"); 
              int selection = sc.nextInt();
                 if(selection==1) acc.jouerCarteaccuser(); 
                 if(selection==2) acc.revelerIdentiteAfterAccusation(accuser);
        
        
        else 
            Bots bot = (Bots)acc;
            bot.accuse(accuser, acc);
        
    

    @objid ("d24ef235-c674-4527-b040-c6f9a23b73e0")
    public void ajouterCarte(RumourCard card) 
        this.main.add(card);
    

    public void jouer() 
        if(this.partie.partieTermier()) 
            System.out.println("Partie terminer");
            this.partie.afficherscore();
        
        else 
            this.dernierJoueurs(this);
        System.out.println("C'est le tour de "+this.getName());
        if(this.main.size()==0) 
            System.out.println("Tu n'as plus des cartes Rumour");
            System.out.println("Tu doit accuser un autre joueur");
            this.accuse();
        
        else 
        Scanner sc= new Scanner(System.in);
        System.out.println("Choisisser 1 pour jouer une carte avec un effet hunt ou 2 pour accuser un autre joueur");
            System.out.println(1+" : Jouer carte avec effet Hunt");  
            System.out.println(2+" : Accuser un autre joueur"); 
            int selection = sc.nextInt();
           if(selection==1) this.jouerCarte(); 
           if(selection==2) this.accuse();
        
        
    
    public String toString() 
        return "" +name;
    
    
    public String printPlayerCards() 
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(name + " has the following cards:\n");

        for (RumourCard card : main) 
            stringBuilder.append(card + "\n");
        

        return stringBuilder.toString();
    
    public void dernierJoueurs(Player p1) 
        for(Player plx : players) 
            plx.dernierjoueur=p1;
        
    
    public Player getdernierJoueur() 
        return dernierjoueur;
    
    public static void main(String[] args) 
        
        Partie game = new Partie();
        Bots marc = new Bots("marc");
        Bots taha = new Bots("taha");
        Bots grg = new Bots("grg");
        Bots elissa = new Bots("elissa");
        Bots salim = new Bots("salim");
        while(!game.jeuterminer())
        
        game.initialiser();
        game.ajouterJoueur(marc);
        game.ajouterJoueur(elissa);
        game.ajouterJoueur(grg);
        game.ajouterJoueur(taha);
        game.ajouterJoueur(salim);
        game.initialiserCarte();
        game.afficherscore();
        game.choisirIdentite();
        game.distribuerRumourCard();
        game.displayCardsForAllPlayers();
        game.commencerpar();
                   
    


以上是我的主引擎代码,我没有发布所有类的代码,但是游戏在控制台端运行良好。

package diagrammedeclasse;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.Iterator;

import javax.swing.JLabel;
import javax.swing.SwingConstants;

public class interfacetest 

    private JFrame frame;
    private Player player;

    public static void main(String[] args) 
        EventQueue.invokeLater(new Runnable() 
            public void run() 
                try 
                    interfacetest window = new interfacetest();
                    window.frame.setVisible(true);
                 catch (Exception e) 
                    e.printStackTrace();
                
            
        );
    

    public interfacetest() 
        initialize();
    

    private void initialize() 
        frame = new JFrame();
        frame.setBounds(100, 100, 1280, 720);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);

        JButton bot4 = new JButton("New button");
        bot4.setBounds(245, 10, 164, 230);

        JButton bot3 = new JButton("New button");
        bot3.setBounds(193, 10, 164, 230);

        JButton bot2 = new JButton("New button");
        bot2.setBounds(139, 10, 164, 230);

        JButton bot1 = new JButton("New button");
        bot1.setBounds(87, 10, 164, 230);

        JButton bot0 = new JButton("New button");
        bot0.setBounds(31, 10, 164, 230);
        
        // getting the image of the angry mob card
                DeckImage angrymobcard = new DeckImage();
                BufferedImage angrymob = angrymobcard.getImage(0, 0);

                // getting the image of the inquisition card
                DeckImage inquisitioncard = new DeckImage();
                BufferedImage inquisition = inquisitioncard.getImage(0, 1);

                // getting the image of the pointed hat card
                DeckImage pointedhatcard = new DeckImage();
                BufferedImage pointedhat = pointedhatcard.getImage(0, 2);

                // getting the image of the hooked nose card
                DeckImage hookednosecard = new DeckImage();
                BufferedImage hookednose = hookednosecard.getImage(1, 0);

                // getting the image of the broomstick card
                DeckImage broomstickcard = new DeckImage();
                BufferedImage broomstick = broomstickcard.getImage(1, 1);

                // getting the image of the wart card
                DeckImage wartcard = new DeckImage();
                BufferedImage wart = wartcard.getImage(1, 2);
                // card5.setIcon(new ImageIcon(wart));

                // getting the image of the ducking stool card
                DeckImage duckingstoolcard = new DeckImage();
                BufferedImage duckingstool = duckingstoolcard.getImage(2, 0);
                // hon code el card.setIcon(new ImageIcon(duckingstool))

                // getting the image of the cauldron card
                DeckImage cauldroncard = new DeckImage();
                BufferedImage cauldron = cauldroncard.getImage(2, 1);

                // getting the image of the evil Eye card
                DeckImage evileyecard = new DeckImage();
                BufferedImage evileye = evileyecard.getImage(2, 2);

                // getting the image of the toad card
                DeckImage toadcard = new DeckImage();
                BufferedImage toad = toadcard.getImage(3, 0);

                // getting the image of the black cat card
                DeckImage blackcatcard = new DeckImage();
                BufferedImage blackcat = blackcatcard.getImage(3, 1);

                // getting the image of the pet newt card
                DeckImage petnewtcard = new DeckImage();
                BufferedImage petnewt = petnewtcard.getImage(3, 2);
                
                JButton card = new JButton("New button");
                card.setBounds(31, 437, 164, 230);
                
                JButton card1 = new JButton("New button");
                card1.setBounds(205, 437, 164, 230);
                
                JButton card2 = new JButton("New button");
                card2.setBounds(382, 437, 164, 230);
                
                JButton card3 = new JButton("New button");
                card3.setBounds(559, 437, 164, 230);
                
                JButton card4 = new JButton("New button");
                card4.setBounds(736, 437, 164, 230);
                

        JLabel welcometext = new JLabel("Welcome to Witch Hunt !");
        welcometext.setHorizontalAlignment(SwingConstants.CENTER);
        welcometext.setBounds(205, 10, 409, 226);
        frame.getContentPane().add(welcometext);

        JButton exitbutton = new JButton("Exit");
        exitbutton.addMouseListener(new MouseAdapter() 
            @Override
            public void mouseClicked(MouseEvent e) 
                System.exit(0);
            
        );

        JButton startbutton = new JButton("Start");
        startbutton.addMouseListener(new MouseAdapter() 
            @Override
            public void mouseClicked(MouseEvent e) 
                // remove old stuff
                startbutton.setVisible(false);
                exitbutton.setVisible(false);
                welcometext.setVisible(false);

                // start the new game
                Partie game = new Partie();
                Bots marc = new Bots("marc");
                Bots taha = new Bots("taha");
                Bots grg = new Bots("grg");
                Bots elissa = new Bots("elissa");
                Bots salim = new Bots("salim");
                while(!game.jeuterminer())
                
                game.initialiser();
                game.ajouterJoueur(marc);
                game.ajouterJoueur(elissa);
                game.ajouterJoueur(grg);
                game.ajouterJoueur(taha);
                game.ajouterJoueur(salim);
                game.initialiserCarte();
                game.afficherscore();
                game.choisirIdentite();
                game.distribuerRumourCard();
                game.displayCardsForAllPlayers();
                game.commencerpar();
                
                // show the back of the other player cards
                DeckImage backcard = new DeckImage();
                BufferedImage back = backcard.getImage(0, 3);
                frame.getContentPane().add(bot4);
                frame.getContentPane().add(bot3);
                frame.getContentPane().add(bot2);
                frame.getContentPane().add(bot1);
                frame.getContentPane().add(bot0);
                bot4.setIcon(new ImageIcon(back));
                bot3.setIcon(new ImageIcon(back));
                bot2.setIcon(new ImageIcon(back));
                bot1.setIcon(new ImageIcon(back));
                bot0.setIcon(new ImageIcon(back));
                
                
                
                
                // create your cards
                frame.getContentPane().add(card);
                frame.getContentPane().add(card1);
                frame.getContentPane().add(card2);
                frame.getContentPane().add(card3);
                frame.getContentPane().add(card4);
                // show your cards
                ArrayList<JButton> bouton = new ArrayList<JButton>();
                bouton.add(card);
                bouton.add(card1);
                bouton.add(card2);
                bouton.add(card3);
                bouton.add(card4);

                player = player.getdernierJoueur();
                Iterator<RumourCard> it = player.getMain().iterator();
                for (int i = 0; i < 5; i++) 
                    while (it.hasNext()) 
                        switch (it.next().getRumourCard()) 
                        case Angry_Mob:
                            bouton.get(i).setIcon(new ImageIcon(angrymob));
                            break;
                        case The_Inquisition:
                            bouton.get(i).setIcon(new ImageIcon(inquisition));
                            break;
                        case Pointed_Hat:
                            bouton.get(i).setIcon(new ImageIcon(pointedhat));
                            break;
                        case Hooked_Nose:
                            bouton.get(i).setIcon(new ImageIcon(hookednose));
                            break;
                        case Broomstick:
                            bouton.get(i).setIcon(new ImageIcon(broomstick));
                            break;
                        case Wart:
                            bouton.get(i).setIcon(new ImageIcon(wart));
                            break;
                        case Ducking_Stool:
                            bouton.get(i).setIcon(new ImageIcon(duckingstool));
                            break;
                        case Cauldron:
                            bouton.get(i).setIcon(new ImageIcon(cauldron));
                            break;
                        case Evil_eye:
                            bouton.get(i).setIcon(new ImageIcon(evileye));
                            break;
                        case Toad:
                            bouton.get(i).setIcon(new ImageIcon(toad));
                            break;
                        case Black_Cat:
                            bouton.get(i).setIcon(new ImageIcon(blackcat));
                            break;

                        case Pet_Newt:
                            bouton.get(i).setIcon(new ImageIcon(petnewt));
                            break;
                        
                    
                

            
        );
        startbutton.setBounds(10, 10, 185, 108);
        frame.getContentPane().add(startbutton);

        exitbutton.setBounds(10, 128, 185, 108);
        frame.getContentPane().add(exitbutton);

    


到目前为止,这是我在图形界面部分尝试做的事情,我得到了卡片的图像,并想获得一个运行游戏主要代码的开始按钮,当我这样做时,游戏运行在控制台上很好,但图形界面冻结。我想知道这是否是正确的方法,或者是否有另一种方法。 任何帮助将不胜感激。

【问题讨论】:

同时检查其他问题,例如***.com/questions/11185485/java-swing-gui-freezes 或***.com/questions/29641537/… 【参考方案1】:

GUI 可能会冻结,因为您在 UI 线程(处理按钮单击的线程)上运行游戏,而在游戏中,您正在 System.in 上的扫描仪上等待。

让 GUI “解开”是很容易的部分:使用单独的线程运行您的游戏模块。困难的部分将是重新定位您的游戏,以便可以从 GUI 使用它,而不是从命令行。

【讨论】:

感谢您的帮助!!

以上是关于Java Swing上的图形界面无法正常工作[重复]的主要内容,如果未能解决你的问题,请参考以下文章

java swing怎样开发出漂亮的界面

运用Swing以便在Java中实现简单的图形界面

Java学习之图形化界面(Swing基础)

第十一周课程总结

图形界面设计

Java Swing 图形界面开发(目录)