有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

我如何访问本地。属性变量?Java Swing正确使用变量

是什么原因导致我不能在代码中使用'StrapName'变量?我现在在这里评论它/*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();
            }
        });
    }
}

共 (1) 个答案

  1. # 1 楼答案

    无法在JFrame构造函数中使用strAppName,因为它超出了范围。在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);
        }