2016-11-14 2 views
-1

Ich habe dieses Programm ohne die Eingabe von Dateien arbeiten, habe ich viel googeln und fragen, aber kann es nicht herausfinden. Ich musste firstnames und secondnames zu einer ArrayList ändern, irgendwelche Ideen, wie man das repariert? Es funktioniert auch mit allen Eingaben von Dateien auskommentiert.ArrayList funktioniert nicht mit Dateieingabe

package com.gamenamegenerator; 

import java.awt.Color; 
import java.awt.Font; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.PrintWriter; 
import java.util.ArrayList; 
import java.util.Collection; 
import java.util.Random; 
import java.util.Scanner; 

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

public class GameNameGenerator{ 

    public static void main(String[] args) throws InterruptedException, IOException{  
     JFrame frame = new JFrame("Game Name Generator"); 
     frame.setSize(1400, 1200); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().setBackground(Color.black); 
     JLabel label = new JLabel(); 
     label.setFont(new Font("SansSerif", Font.BOLD, 75)); 
     label.setForeground(Color.BLUE); 
     frame.setLocationRelativeTo(null); 
     frame.setResizable(true); 
     frame.setVisible(true); 
     ArrayList<String> firstnames = new ArrayList<String>(); 
     ArrayList<String> secondnames = new ArrayList<String>(); 
     String[] firstnameslist = new String[] {"Healthy", "Closed", "Open", "Central", "Remorseful", "Sideways", "Diving", "Trackable", "Wary", "Determined", "Contested", "Continuous", "Hungry", "Limited", "Accredited", "Junky", "Hilarious", "Real", "Stiff", "Agile", "Solid", "Knowing", "Expectant", "Heavy", "Dense", "Unexpectant", "Insolent", "Accurate", "Sufferable", "Painful", "Wise", "Knowledgeable", "Growing", "Confused", "Careful", "Untrusting", "Untrustworthy", "Trusting", "Trustworthy", "Laughing", "Sick", "Hasty", "Reluctant", "Barbaric", "Desperate", "Returning", "Mechanical", "Pondering", "Thoughtful", "Dark", "Positive", "Hated", "Spiteful", "Hateful", "Shimmering", "Assumptive", "Brainy", "Battling", "Commercial", "Bankrupt", "Back Firing", "Babysitting", "Pampered", "Pocket", "Adaptive", "Wet", "Automatic", "Shaky", "Sorrowful", "Experienced", "Inexperienced", "Smooth", "Youthful", "Technological", "Advanced", "Minor", "Hungry", "Misguided", "Feverish", "Drunk", "Dependent", "Burnt", "Humiliated", "Bossy", "Peaceful", "Official", "Junior", "Logical", "Absent", "Curious", "Sharp", "Black", "Broad", "Flabby", "Runny", "Cold Hearted", "Cold", "Fiery", "Speeding", "Flying", "Awoken", "Camoflaged", "Iron", "Golden", "Watchful", "Guarding", "Avenging", "Displaced", "Broken", "Mismatched", "Glistening", "Turbulent", "Difficult", "Approving", "Floating", "Aquatic", "Energetic", "Vibrant", "Animated", "Metallic", "Streamlined", "Cracked", "Aerobatic", "Flimsy", "Absurd", "Dozing", "Dopy", "Pointy", "Paranormal", "Angry", "Slurping", "Gasping", "Oblivious", "Babbling", "Steroid Taking", "Steroids", "Mutated", "Chubby", "Uncooperative", "Smelly", "Inhuman", "Accidental", "Freak", "Scientific", "Combative", "Inaccessible", "Abusive", "Extraterrestrial", "Extravagant", "Undeniably", "Combat", "Enormous", "Giant", "Overrated", "Undeniable", "Secretive", "Comprehensive", "Legendary", "Treacherous", "Deceptive", "Lying", "Hairy", "Loony", "Skinny", "Scrawny", "Genetically Modified", "Modified", "Super", "Arrogant", "Mysterious", "Sneaky", "Deadly", "Fatal", "Dangerous", "Breezy", "Superior", "Flabbergasted", "Mouldy", "Molten", "Squishy", "Moist", "Mushy", "Fluffy", "Magical", "Slimy", "Sloppy", "Elderly", "Stout", "Fat", "Genetically Mutated", "Mutated", "Space", "Cheeky", "Violent", "Amputated", "Snowy", "Poisonous", "Stale", "Alpine", "Rural", "Urban", "Sparkling", "Epicer", "Clumsy", "Interactive", "Edible", "Sublime", "Woollen", "Toxic", "Flammable", "Lazy", "Glowing", "Explosive", "Exploring", "Colossal", "United", "Water", "Clever", "Irresistible", "Grumpy", "Ballistic", "Rebellious", "Majestic"}; 
     String[] secondnameslist = new String[] {"Life", "Warmonger", "Computer", "Buttocks", "Drink", "Aid", "Shot", "Mate", "Standards", "Alien", "Cloud", "Trees", "Nursing", "Time Bomb", "Bomb", "Time", "Times", "Happiness", "Gunfire", "Heart", "Darkness", "Positivity", "Hater", "Oil", "Spy", "Outsider", "Insider", "Biscuit", "Business", "Advertisement", "Instrument", "Balaclava", "Backpacker", "Back Fire", "Believer", "Handler", "Weakling", "Man", "Peacock", "Buddy", "Revenge", "Eye", "Bear", "Bin", "Nose", "Rocket", "Golem", "Guard", "Sentry", "Canine", "Bone", "Error", "Robot", "Rock", "Stick", "Invention", "Bear", "Koala", "Dinosaur", "Bunny", "Bubble", "Chocolate", "Creation", "Accident", "Mutation", "Mongoose", "Vibrations", "Liar", "Merchant", "Orb", "Turnip", "Wombat", "Creature", "Strength", "Contempt", "Disk", "Vegetable", "Vegan", "Squirrel ", "Mud", "Cheese", "Tape", "Lava", "Magma", "Rainbow", "Devil", "Dwarf", "Remix", "Sapling", "Owl", "Poison", "Butterfly", "Flatulence", "Flop", "Fail", "Fart", "Cake", "Monkey", "Penguin", "Dog", "Cat", "Block", "Steam", "Goose", "Waste", "Nightmare", "Potato", "Nerd", "Cookie", "Whale", "Falcon", "Chipmunk", "Carrot", "Donkey", "Toad", "Cauliflower", "Fire", "Gust", "Bumfluff", "Blob", "Puppy", "Cube", "Butt Cheeks", "Bumfluffles"}; 
     for(int i = 0; i < firstnameslist.length; i++){ 
      firstnames.add(firstnameslist[i]); 
     } 
     for(int i = 0; i < secondnameslist.length; i++){ 
      firstnames.add(secondnameslist[i]); 
     } 
     Scanner firstnameinput = null; 
     try{ 
      firstnameinput = new Scanner(new File("firstnameinput.txt")); 
      firstnameinput.useDelimiter(", "); 
     } 
     catch(Exception e){ 
      System.out.println("File firstnameinput.txt not found! :("); 
     } 
     while(firstnameinput.hasNext()){ 
      String a = firstnameinput.next(); 
      System.out.print(a + " "); 

      firstnames.add(a); 
     } 
     firstnameinput.close(); 
     Scanner secondnameinput = null; 
     try{ 
      secondnameinput = new Scanner(new File("secondnameinput.txt")); 
      secondnameinput.useDelimiter(", "); 
     } 
     catch(Exception e){ 
      System.out.println("File secondnameinput.txt not found! :("); 
     } 
     while(secondnameinput.hasNext()){ 
      String a = secondnameinput.next(); 
      System.out.print(a + " "); 

      secondnames.add(a); 
     } 
     secondnameinput.close(); 
     while(true){ 
      Random rnd = new Random(); 

      int n1 = rnd.nextInt(firstnames.size() - 1); 
      int n2 = rnd.nextInt(secondnames.size() - 1); 

      int combinations = firstnames.size() * secondnames.size(); 

      String result = firstnames.get(n1) + " " + secondnames.get(n2); 
      System.out.println(result); 

      label.setText(result); 
      label.setHorizontalAlignment(SwingConstants.CENTER); 
      frame.add(label); 
      try { 
       File file = new File("generatednames.txt"); 
       FileWriter x = new FileWriter(file, true); 
       x.write(result + ", "); 
       x.close(); 
      } catch (FileNotFoundException e) { 
       System.out.println("Could not open or create text file!"); 
      } 
      try{ 
       PrintWriter writer = new PrintWriter("gamenamegeneratorstats.txt", "UTF-8"); 
       writer.println("STATS FOR THIS VERSION"); 
       writer.println("Possible Combinations: " + combinations); 
       writer.println("Please enjoy your generated names!"); 
       writer.close(); 
      } catch (Exception e) { 
       System.out.println("Could not open or create text file!"); 
      } 
      Thread.sleep(2500); 
     } 

    } 
} 
+0

So viel hier zu korrigieren, zu viel in der Tat, und so fordere ich Dich auf: 1. über zu starten. 2. Befolgen Sie die grundlegenden Java und OOP-Prinzipien von Anfang an, einschließlich der Erstellung mehrerer Klassen, von denen einige mit dem Status und der Logik Ihres Programms und anderen, die sich mit der GUI befassen, umgehen. 3. Holen Sie den größten Teil Ihres Codes aus der statischen Hauptmethode heraus und in die Instanzwelt, in die er gehört (weitere Informationen hierzu finden Sie in # 2 über die folgenden OOP-Prinzipien). 4. Respect Swing threading (Dein Code funktioniert nicht mit seiner 'while (true)' Schleife und 'Thread.sleep (...)'). –

+0

@HovercraftFullOfEels Ok, vielen Dank für den Rat, wie Sie offensichtlich sehen können Ich bin sehr neu in der Programmierung und vor allem Java. Danke nochmal dafür, dass du mich in die richtige Richtung gelenkt hast, sehr geschätzt. –

Antwort

0

Ihr Code immer noch ein paar Probleme. Das Hauptproblem Sie lernen müssen, ist EDT (Alle anderen Swing-Komponente Methoden müssen vom Event Dispatch Thread aufgerufen werden)

Sie müssen Ihren Code aktualisieren:

frame.setLocationRelativeTo(null); 
frame.setResizable(true); 
frame.setVisible(true); 

mit innerhalb SwingUtilities Aufruf

SwingUtilities.invokeLater(() -> { 
    frame.setLocationRelativeTo(null); 
    frame.setResizable(true); 
    frame.setVisible(true); 
}); 

und ändern:

label.setText(result); 
    label.setHorizontalAlignment(SwingConstants.CENTER); 
    frame.add(label); 

zu

SwingUtilities.invokeLater(() -> { 
     label.setText(result); 
     label.setHorizontalAlignment(SwingConstants.CENTER); 
     frame.add(label); 
     frame.revalidate(); 
     frame.repaint(); 
    }); 
+0

Immer noch kein Glück, sogar mit Ihren Änderungen –

+0

Es ist immer noch nur ein schwarzer Bildschirm. –

+0

Jede Ausnahme, die Sie sehen? – Jerry06

Verwandte Themen