【问题标题】:progress bar loading is not working进度条加载不起作用
【发布时间】:2017-12-23 07:31:45
【问题描述】:

我尝试在我的框架中运行进度条,但它不起作用。我试图在我的第二个 java 类中显示可见但设置为 visible(true) 将其显示为错误。 希望你们能帮助我解决我的问题/错误

在我的第二个 java 类中显示错误: “线程“主”中的异常 java.lang.Error:未解决的编译问题:方法 setvisible(boolean) 未定义类型 mgfinancewindow"

First java class: mgfinancewindow.java
package mgfinance;

import java.awt.EventQueue;
import java.awt.Font;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import java.awt.Color;
import javax.swing.JLabel;
import javax.swing.SwingConstants;

public class mgfinancewindow {
private JFrame frame;
public JProgressBar progressBar;
public JLabel lblNewLabel;

/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                mgfinancewindow window = new mgfinancewindow();
                window.frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the application.
 */
public mgfinancewindow() {
    initialize();
}

/**
 * Initialize the contents of the frame.
 */
private void initialize() {
    frame = new JFrame("MG Finances");
    frame.setBounds(100, 100, 450, 300);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
    frame.getContentPane().setLayout(null);

    JPanel panel = new JPanel();
    panel.setBounds(0, 0, 1362, 705);
    frame.getContentPane().add(panel);
    panel.setLayout(null);

    JPanel panel_1 = new JPanel();
    panel_1.setBackground(Color.DARK_GRAY);
    panel_1.setBounds(0, 646, 1362, 59);
    panel.add(panel_1);
    panel_1.setLayout(null);

    lblNewLabel = new JLabel("Loading...");
    lblNewLabel.setFont(new Font("Tahoma", Font.BOLD | Font.ITALIC, 16));
    lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER);
    lblNewLabel.setForeground(Color.WHITE);
    lblNewLabel.setBounds(1139, 0, 114, 34);
    panel_1.add(lblNewLabel);

    progressBar = new JProgressBar();
    progressBar.setBackground(new Color(0, 51, 51));
    progressBar.setBounds(0, 34, 1362, 14);
    panel_1.add(progressBar);

    JLabel lblMgFinance = new JLabel("MG Finance");
    lblMgFinance.setHorizontalAlignment(SwingConstants.CENTER);
    lblMgFinance.setFont(new Font("Tahoma", Font.BOLD | Font.ITALIC, 16));
    lblMgFinance.setForeground(Color.BLUE);
    lblMgFinance.setBounds(0, 11, 1362, 635);
    panel.add(lblMgFinance);


}

}

第二个java类:progressbar.java

package mgfinance;


public class progress {
public static void main(String[] args) throws InterruptedException{
    mgfinancewindow load = new mgfinancewindow();
    for(int i=0; i<=100; i++){
        Thread.sleep(150);
        load.setvisible(true);
        load.lblNewLabel.setText("Loading..."+ i);
        load.progressBar.setValue(i);
    }
}

}

【问题讨论】:

    标签: java swing progress-bar


    【解决方案1】:

    您的 mgfinancewindow 类不是 JComponent 以支持 setVisible() 方法本身。里面的JFrame有setVisible方法。

    按照您编写代码的方式,为了快速解决您的问题,您必须在 mgfinancewindow 类中的 initialize() 方法的末尾(最后一条语句)编写 frame.setVisible(true);,并从 main 中删除 load.setvisible(true); progress类的方法:

    public class progress {
        public static void main(String[] args) throws InterruptedException {
            mgfinancewindow load = new mgfinancewindow();
            for (int i = 0; i <= 100; i++) {
                Thread.sleep(150);
                //load.setvisible(true);
                load.lblNewLabel.setText("Loading..." + i);
                load.progressBar.setValue(i);
            }
        }
    }
    

    和

    import java.awt.Color;
    import java.awt.EventQueue;
    import java.awt.Font;
    
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JProgressBar;
    import javax.swing.SwingConstants;
    
    public class mgfinancewindow {
        private JFrame frame;
        public JProgressBar progressBar;
        public JLabel lblNewLabel;
    
        /**
         * Launch the application.
         */
        public static void main(String[] args) {
            EventQueue.invokeLater(new Runnable() {
                public void run() {
                    try {
                        mgfinancewindow window = new mgfinancewindow();
                        window.frame.setVisible(true);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
        }
    
        /**
         * Create the application.
         */
        public mgfinancewindow() {
            initialize();
        }
    
        /**
         * Initialize the contents of the frame.
         */
        private void initialize() {
            frame = new JFrame("MG Finances");
            frame.setBounds(100, 100, 450, 300);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
            frame.getContentPane().setLayout(null);
    
            JPanel panel = new JPanel();
            panel.setBounds(0, 0, 1362, 705);
            frame.getContentPane().add(panel);
            panel.setLayout(null);
    
            JPanel panel_1 = new JPanel();
            panel_1.setBackground(Color.DARK_GRAY);
            panel_1.setBounds(0, 646, 1362, 59);
            panel.add(panel_1);
            panel_1.setLayout(null);
    
            lblNewLabel = new JLabel("Loading...");
            lblNewLabel.setFont(new Font("Tahoma", Font.BOLD | Font.ITALIC, 16));
            lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER);
            lblNewLabel.setForeground(Color.WHITE);
            lblNewLabel.setBounds(1139, 0, 114, 34);
            panel_1.add(lblNewLabel);
    
            progressBar = new JProgressBar();
            progressBar.setBackground(new Color(0, 51, 51));
            progressBar.setBounds(0, 34, 1362, 14);
            panel_1.add(progressBar);
    
            JLabel lblMgFinance = new JLabel("MG Finance");
            lblMgFinance.setHorizontalAlignment(SwingConstants.CENTER);
            lblMgFinance.setFont(new Font("Tahoma", Font.BOLD | Font.ITALIC, 16));
            lblMgFinance.setForeground(Color.BLUE);
            lblMgFinance.setBounds(0, 11, 1362, 635);
            panel.add(lblMgFinance);
    
            frame.setVisible(true);
        }
    
    }
    

    但是:

    当您创建像mgfinancewindow 这样的组件时,它会在内部创建一个JFrame,大多数时候最好从JFrame 扩展,然后您可以从中创建一个对象并在程序的主方法中调用setVisible 方法。最好不要在该组件内调用setVisible,因为在其他类中,有时您想创建和初始化mgfinancewindow,但又不想让它立即可见。

    其他提示:

    根据Java 编码约定:

    1. 您的类名必须遵循 CamelCase 样式。
    2. 变量名称必须遵循 camelCase(第一个字母小写)样式。

    您可能想看看其他 java 编码约定 here。

    【讨论】:

    • @sharkrish:欢迎您。希望这可以帮助。在 stackoverflow 中,当某个答案对您有帮助或解决了您的问题时,您可能需要选中答案左侧的绿色复选标记以将其标记为答案。
    • 但我还是遇到了同样的问题。进度条不起作用。进度条未运行/加载显示 0%
    • 这是因为您在mgfinancewindow 类中运行了错误的main 方法。您应该在progress 类中运行main 方法。
    • 你能把编辑后的工作代码发给我吗?希望你能帮助我
    • 我已经添加了代码,别忘了运行progress类的main方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多