2016-11-14 2 views
-1

У меня есть эта программа, работающая без ввода файлов, я пробовал много поисковых запросов и запросов, но не могу понять это. Мне пришлось изменить firstnames и secondnames на ArrayList, любые идеи, как это исправить? Он также работает со всеми входными данными из прокомментированных файлов.ArrayList не работает с вводом файлов

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

Так много, чтобы исправить здесь, слишком много, и поэтому я призываю вас: 1. Начать сначала. 2. Следуйте основным принципам Java и OOPs с самого начала, включая создание нескольких классов, некоторые из которых касаются состояния и логики вашей программы и других, которые касаются GUI. 3. Получите большую часть своего кода из статического основного метода и в мир экземпляров, где он принадлежит (см. № 2 о следующих принципах ООП для более подробного описания этого). 4. Respect Swing threading (ваш код не имеет его 'while (true)' loop и 'Thread.sleep (...)'). –

+0

@HovercraftFullOfEels Хорошо, спасибо за совет, так как вы, очевидно, видите, я очень новичок в программировании и особенно в java. Еще раз спасибо за то, что указали мне в правильном направлении, высоко оценили. –

ответ

0

Ваш код еще несколько проблем. Основной вопрос, вам нужно узнать, является EDT (Все другие методы свинг компонент должен быть вызван из отправки потока событий)

Вам необходимо обновить код:

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

с заходом в SwingUtilities

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

И изменение:

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

до

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

По-прежнему не везет даже с вашими изменениями –

+0

Это еще черный экран. –

+0

Любое исключение вы видите? – Jerry06

Смежные вопросы