是什么原因使我无法在此代码中使用'strAppName'变量?我对此发表了评论,现在在此处显示/*strAppName*/JFrame frame = new JFrame(/*strAppName*/);

当我运行System.out.println(strAppName);时,它会以应用程序名称显示在Eclipse控制台中。谢谢!

package base;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.io.*;
import java.util.*;

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;

public class StickyNotes extends JFrame {

    private static final long serialVersionUID = 1L;

    public final static String SAVE_CHANGES = "Save changes?";
    public final static String TITLE_AYS = "Are You Sure?";

    private void createStickyNotesGUI() {

        Properties configProperties = new Properties();
        try {

            FileInputStream fileInputStream = new FileInputStream("resources/config.properties");
            configProperties.load(fileInputStream);
            String strAppName = configProperties.getProperty("appName");
            //System.out.println(strAppName);
            fileInputStream.close(); // better in finally block ?? /* http://en.wikipedia.org/wiki/.properties */
        } catch (Exception ex){
            //TODO
            System.out.println("Exception: " + ex);
        }

/*      LoadPropertiesExample config = new LoadPropertiesExample();
        config.loadProps2();
        config.sayHello();*/

        // Create and set up the window.
        JFrame frame = new JFrame(/*strAppName*/);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new FlowLayout(FlowLayout.LEFT));

        // Add Main Menu
        MainMenuBar mainMenu = new MainMenuBar();
        frame.setJMenuBar(mainMenu.createMainMenuBar(frame));

        // Add Content Pane // can I pass a layout object?
        frame.setContentPane(ContentPaneCreator.createContentPane());
        // contentPane.add(scrollPane, BorderLayout.CENTER);

        // Add Tool Bar
        ToolBarCreator toolBar = new ToolBarCreator();
        frame.getContentPane().add(toolBar.createToolBar(), BorderLayout.NORTH);

        // Add Label
        frame.getContentPane().add(
                LabelCreator.createLabel(frame,
                        "use Swing and JavaFX together."), BorderLayout.NORTH);

        // Display the window.
        frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
        // TODO
        /*set configuration to remember frame size*/

        frame.setVisible(true);
    }

    public void doExit(JFrame frame) {
        boolean fDirty = true;
        if (fDirty)
            switch (JOptionPane.showConfirmDialog(StickyNotes.this, SAVE_CHANGES,
                    TITLE_AYS, JOptionPane.YES_NO_OPTION)) {
            case JOptionPane.YES_OPTION:
                // if (doSave())
                frame.dispose();
                break;
            case JOptionPane.NO_OPTION:
                frame.dispose();
            }
        else
            frame.dispose();
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new StickyNotes().createStickyNotesGUI();
            }
        });
    }
}

最佳答案

您不能在strAppName构造函数中使用JFrame,因为它超出了范围。您在try / catch块中声明它。

尝试这个:

    String strAppName = null;
    try {

        FileInputStream fileInputStream = new FileInputStream("resources/config.properties");
        configProperties.load(fileInputStream);
        strAppName = configProperties.getProperty("appName");
        //System.out.println(strAppName);
        fileInputStream.close(); // better in finally block ?? /* http://en.wikipedia.org/wiki/.properties */
    } catch (Exception ex){
        //TODO
        System.out.println("Exception: " + ex);
    }

10-06 02:49