【问题标题】:NetBeans Java Project Won't Display GUI Window Despite No Error尽管没有错误,NetBeans Java 项目不会显示 GUI 窗口
【发布时间】:2012-08-08 12:41:44
【问题描述】:

我正在尝试使用 Netbeans IDE 7.1 构建一个 java 项目。

我无法看到或查看我创建的 GUI 窗口。

请多多指教。

在我的课堂上:

package rmiSimpleCalc;

public class RMISimpleCalculatorMain {

    public static void main(String[] args) {
        MainCalculator calc = new MainCalculator();
        calc.setVisible(true);
    }
}

MainCalculator 是我想要运行的 GUI 窗口。它不知何故不会显示。

在我的控制台中出现 NO 错误消息。..

这里是MainCalculator 代码:

package rmiSimpleCalc;

import java.rmi.*;

public class MainCalculator extends javax.swing.JPanel {

    public MainCalculator() {
        initComponents();
        ComboBoxOperator.addItem("+");
        ComboBoxOperator.addItem("-");
        ComboBoxOperator.addItem("/");
        ComboBoxOperator.addItem("*");             
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        txtFirstDigit = new javax.swing.JTextField();
        txtSecondDigit = new javax.swing.JTextField();
        btnCalculate = new javax.swing.JButton();
        lblFirstDigit = new javax.swing.JLabel();
        lblSecondDigit = new javax.swing.JLabel();
        ComboBoxOperator = new javax.swing.JComboBox();
        lblOperator = new javax.swing.JLabel();
        lblResult = new javax.swing.JLabel();
        lblHeader = new javax.swing.JLabel();
        btnConfigureServer = new javax.swing.JButton();
        txtResult = new javax.swing.JTextField();

        btnCalculate.setText("Calculate");
        btnCalculate.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnCalculateActionPerformed(evt);
            }
        });

        lblFirstDigit.setText("First Digit");

        lblSecondDigit.setText("Second Digit");

        ComboBoxOperator.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));

        lblOperator.setText("Operator");

        lblResult.setText("Result");

        lblHeader.setText("RMI Simple Calculator");

        btnConfigureServer.setText("Configure Server");
        btnConfigureServer.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnConfigureServerActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(lblFirstDigit, javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(lblSecondDigit, javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(lblOperator, javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(lblResult, javax.swing.GroupLayout.Alignment.TRAILING))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(lblHeader)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(ComboBoxOperator, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(18, 18, 18)
                        .addComponent(btnCalculate))
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                        .addComponent(txtSecondDigit)
                        .addComponent(txtFirstDigit, javax.swing.GroupLayout.PREFERRED_SIZE, 128, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(txtResult, javax.swing.GroupLayout.PREFERRED_SIZE, 125, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(btnConfigureServer)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(12, 12, 12)
                .addComponent(lblHeader)
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(txtFirstDigit, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(lblFirstDigit))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(txtSecondDigit, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(lblSecondDigit))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(ComboBoxOperator, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(lblOperator)
                    .addComponent(btnCalculate))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblResult)
                    .addComponent(txtResult, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(btnConfigureServer)
                .addContainerGap(24, Short.MAX_VALUE))
        );
    }                       

    private void btnConfigureServerActionPerformed(java.awt.event.ActionEvent evt) {                                                   

    }                                                  

    private void btnCalculateActionPerformed(java.awt.event.ActionEvent evt) {                                             
        double firstdigit;
        double seconddigit;
        String operator;

        firstdigit = Double.valueOf(txtFirstDigit.getText());

        seconddigit = Double.valueOf(txtSecondDigit.getText());

        operator = ComboBoxOperator.getSelectedItem().toString();

        try
        {
            CoreInterface coreobj = (CoreInterface) Naming.lookup("localhost/Core");
            double result = (coreobj.calc(firstdigit,seconddigit,operator));
            txtResult.setText(Double.toString(result));
        }

        catch(Exception e)
        {
            txtResult.setText("e");
        }   
    }                                            

    private javax.swing.JComboBox ComboBoxOperator;
    private javax.swing.JButton btnCalculate;
    private javax.swing.JButton btnConfigureServer;
    private javax.swing.JLabel lblFirstDigit;
    private javax.swing.JLabel lblHeader;
    private javax.swing.JLabel lblOperator;
    private javax.swing.JLabel lblResult;
    private javax.swing.JLabel lblSecondDigit;
    private javax.swing.JTextField txtFirstDigit;
    private javax.swing.JTextField txtResult;
    private javax.swing.JTextField txtSecondDigit;
    // End of variables declaration                   
}

感谢任何建议。

【问题讨论】:

  • MainCalculator 类中的代码会有所帮助。
  • 确保RMISimpleCalculatorMain被定义为主类。
  • 当然我已经把它定义为主类......

标签: java swing netbeans


【解决方案1】:

MainCalculator 类是 JPanelJPanel 不能只是这样显示,它必须是 Window 的一部分。将其添加到JFrame 并在JFrame 上调用setVisible(true)

另外,@npinti 的建议非常好:在 EDT 线程中执行与 GUI 相关的代码。

【讨论】:

    【解决方案2】:

    这个问题最有可能出现在这个部分:

    public static void main(String[] args) {
            MainCalculator calc = new MainCalculator();
            calc.setVisible(true);
        }
    

    您需要在事件调度线程 (EDT) 中执行任何与 GUI 相关的任务。

    试试这样的:

    public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable()
            {
                @Override
                public void run()
                { 
                    MainCalculator calc = new MainCalculator();
                    calc.setVisible(true);
                }
            });
        }
    

    【讨论】:

    • @rofansmanao:错误是什么?我的代码有错字。您可能还需要在末尾添加.start()
    • java.lang.Runnable 是抽象的,不能实现抽象方法。
    • @rofansmanao:再次抱歉,我想我现在已经解决了。我没有Java编译器,它应该是固定的。此外,根据 SoboLan 的建议,您需要将其添加到 JFrameJPanels 不能单独存在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-30
    • 1970-01-01
    相关资源
    最近更新 更多