【问题标题】:About making a GUI program an exe file.... (Java)关于将 GUI 程序制作为 exe 文件.... (Java)
【发布时间】:2015-07-28 18:31:39
【问题描述】:

我最近做了一个随机句子生成器。它从两个文件(一个名词和一个动词文件)中读取,并使用文件中的两个名词作为主语和宾语,中间有一个动词。它作为一个java文件工作,但是当我按照wikihow上的教程将它变成一个exe文件(链接-http://www.wikihow.com/Create-an-Executable-File-from-Eclipse)时,程序将运行,但标签不会按照指定的方式更改。我将名词和动词文本文件与exe文件放在同一个文件夹中,所以我不明白我的错在哪里。非常感谢任何帮助:D

谢谢, 弧形海象

import java.util.Scanner;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import java.util.Random;
import javax.swing.*;
import java.nio.charset.Charset;
import java.nio.file.*;


public class HelloWorld {

public static void main(String[] args) {

    JFrame sentenceFrame = new JFrame("Ayy Lmao");
    JLabel subjectLabel = new JLabel();
    subjectLabel.setHorizontalAlignment(JLabel.CENTER);
    subjectLabel.setText("Have fun and have a dirty, dirty mind");
    String defaultTextField = "Enter a word here!";
    JTextField inputField = new JTextField(defaultTextField);

    sentenceFrame.setLayout(new GridLayout(4,1));

    String[] optionList = {"Subject", "Verb", "Object"};
    JComboBox optionBox = new JComboBox(optionList);

    optionBox.setSelectedIndex(2);
    class ComboListener implements ActionListener{
        public void actionPerformed(ActionEvent e){
            JComboBox cb = (JComboBox)e.getSource();
            String selectedOption = (String)cb.getSelectedItem();
        }
    }

    ActionListener comboListener = new ComboListener();
    optionBox.addActionListener(comboListener);





    //sentencePanel.setLayout(new BorderLayout);
    sentenceFrame.setBackground(Color.MAGENTA);

    JButton createSentenceButton = new JButton("CREATE!");


    sentenceFrame.add(subjectLabel);
    sentenceFrame.add(inputField);
    sentenceFrame.add(optionBox);
    sentenceFrame.add(createSentenceButton);



    class ButtonListener implements ActionListener{
        public void actionPerformed(ActionEvent event){
            String subject;
            String verb;
            String object;
            if (inputField.getText().equals("") || inputField.getText().equals(defaultTextField)){
                String subjectNoun = findNoun();
                subject = subjectNoun.substring(0, 1).toUpperCase() + subjectNoun.substring(1, subjectNoun.length());
                verb = findVerb();
                object = findNoun();
                subjectLabel.setText(subject + " " + verb + " " + object + ".");
            }

            else{
                if(optionBox.getSelectedItem().equals("Subject")){
                    subject = inputField.getText().substring(0,1).toUpperCase() + inputField.getText().substring(1, inputField.getText().length());
                    verb = findVerb();
                    object = findNoun();
                    subjectLabel.setText(subject + " " + verb + " " + object + ".");
                }
                if(optionBox.getSelectedItem().equals("Verb")){
                    subject = findNoun();
                    subject.substring(0, 1).toUpperCase();
                    verb = inputField.getText();
                    object = findNoun();
                    subjectLabel.setText(subject + " " + verb + " " + object + ".");
                }
                if (optionBox.getSelectedItem().equals("Object")){
                    subject = findNoun();
                    subject.substring(0, 1).toUpperCase();
                    verb = findVerb();
                    object = inputField.getText();
                    subjectLabel.setText(subject + " " + verb + " " + object + ".");
                }
            }


        }
    }

    ActionListener listener1 = new ButtonListener();

    createSentenceButton.addActionListener(listener1);


    sentenceFrame.setSize(500, 200);
    sentenceFrame.setVisible(true);
    sentenceFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

public static String findNoun(){
    /* // The name of the file to open.
    String fileName = "temp.txt";

    // This will reference one line at a time
    String line = null;

    try {
        // FileReader reads text files in the default encoding.
        FileReader fileReader = 
            new FileReader(fileName);

        // Always wrap FileReader in BufferedReader.
        BufferedReader bufferedReader = 
            new BufferedReader(fileReader);

        while((line = bufferedReader.readLine()) != null) {
            System.out.println(line);
        }    

        // Always close files.
        bufferedReader.close();            
    }
    catch(FileNotFoundException ex) {
        System.out.println(
            "Unable to open file '" + 
            fileName + "'");                
    }
    catch(IOException ex) {
        System.out.println(
            "Error reading file '" 
            + fileName + "'");                   
        // Or we could just do this: 
        // ex.printStackTrace();
    */
    Random random = new Random();

    String fileName = "src/Nouns.txt";

    String line = null;

    //int numNouns = 0;
    ArrayList<String> nounsArrayList = new ArrayList<String>();

    try {
        FileReader fileReader = new FileReader(fileName);
        BufferedReader bufferedReader = new BufferedReader(fileReader);

        while((line = bufferedReader.readLine()) != null){
            //System.out.println(line);
            //numNouns++;
            nounsArrayList.add(line);

        }
        bufferedReader.close();
    } catch(FileNotFoundException ex){
        System.out.println("ERROR- Unable to open file '" + fileName + "'");
        }
      catch(IOException ex) {
          System.out.println("Error reading file '" + fileName + "'");
      }

    int randomNounNum = random.nextInt(nounsArrayList.size() - 1);
    return nounsArrayList.get(randomNounNum);

    }

public static String findVerb(){
    Random random = new Random();

    String fileName = "src/Verbs.txt";

    String line = null;

    //int numNouns = 0;
    ArrayList<String> verbsArrayList = new ArrayList<String>();

    try {
        FileReader fileReader = new FileReader(fileName);
        BufferedReader bufferedReader = new BufferedReader(fileReader);

        while((line = bufferedReader.readLine()) != null){
            //System.out.println(line);
            //numNouns++;
            verbsArrayList.add(line);

        }
        bufferedReader.close();
    } catch(FileNotFoundException ex){
        System.out.println("ERROR- Unable to open file '" + fileName + "'");
        }
      catch(IOException ex) {
          System.out.println("Error reading file '" + fileName + "'");
      }

    int randomVerbNum = random.nextInt(verbsArrayList.size() - 1);
    return verbsArrayList.get(randomVerbNum);

    }

}

【问题讨论】:

  • 为什么是 .exe 而不是 .jar 文件?
  • "在 Eclipse 中完成您的项目后,您的下一个目标将是为您的项目创建一个可运行的版本。最简单和最标准的运行Java 项目是运行一个可执行文件(.exe)。” 多么完整的牛屎负载! Java 应用程序。旨在在 Windows、OS X 和 *nix 上运行。 部署 Java 桌面应用程序的最佳方式是使用Java Web Start
  • @HovercraftFullOfEels 我认为他们被问题中链接的“如何做”中的文字所愚弄。我从如何页面的顶部引用了一点。
  • 请参阅 Detection/fix for the hanging close bracket of a code block 了解我无法再费心修复的问题。
  • @HovercraftFullOfEels 即使作为“可执行 jar 文件”它也不起作用。

标签: java swing file executable embedded-resource


【解决方案1】:
FileReader fileReader = new FileReader(fileName);
BufferedReader bufferedReader = new BufferedReader(fileReader);

应用程序资源在部署时将成为嵌入式资源,因此明智的做法是立即开始访问它们。 必须通过 URL 而不是文件访问。请参阅info. page for embedded resource 了解如何形成 URL。

【讨论】:

  • 感谢您的帮助,现在就试试这个
猜你喜欢
  • 2017-11-06
  • 2018-05-26
  • 1970-01-01
  • 2012-04-21
  • 2013-06-12
  • 1970-01-01
  • 2011-08-04
  • 2010-09-13
相关资源
最近更新 更多