【问题标题】:JFrame won't open when running application in Eclipse在 Eclipse 中运行应用程序时 JFrame 不会打开
【发布时间】:2017-10-15 01:22:20
【问题描述】:

我正在尝试创建一个简单的 GUI,它采用两个值并根据用户选择的按钮进行减法/加法/除法。我对我的代码感到满意,但由于某种原因,当我运行我的程序时,我没有看到任何可见的框架,也没有收到任何错误。

import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JButton;
import java.awt.Font;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class Calc {

private JFrame frame;
private JTextField firstNumber;
private JTextField secondNumber;
private JTextField textField_2;

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

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

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

    firstNumber = new JTextField();
    firstNumber.setBounds(28, 41, 156, 26);
    frame.getContentPane().add(firstNumber);
    firstNumber.setColumns(10);

    secondNumber = new JTextField();
    secondNumber.setBounds(28, 145, 156, 26);
    frame.getContentPane().add(secondNumber);
    secondNumber.setColumns(10);

    JLabel lblNewLabel = new JLabel("First Number");
    lblNewLabel.setBounds(28, 27, 110, 16);
    frame.getContentPane().add(lblNewLabel);

    JLabel lblNewLabel_1 = new JLabel("Second Number");
    lblNewLabel_1.setBounds(28, 131, 110, 16);
    frame.getContentPane().add(lblNewLabel_1);

    JLabel answerLabel = new JLabel("ANSWER:");
    answerLabel.setFont(new Font("Lucida Grande", Font.PLAIN, 20));
    answerLabel.setBounds(216, 46, 190, 16);
    frame.getContentPane().add(answerLabel);

    JButton plusButton = new JButton("Add");
    plusButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            try{
                int number1 = Integer.parseInt(firstNumber.getText());
            }
            catch (Exception exc){
                JOptionPane.showMessageDialog(frame,"Error: bad first number.");
                return;
            }
            try{
                int number2 = Integer.parseInt(secondNumber.getText());
            }
            catch (Exception exc){
                JOptionPane.showMessageDialog(frame,"Error: bad second number.");
                return;
            }
            int number1 = 0, number2 = 0;
            int answer = number1 + number2;
            answerLabel.setText("The answer is: "+answer);
        }
    });
    plusButton.setToolTipText("Adds first from second number");
    plusButton.setBounds(28, 183, 117, 29);
    frame.getContentPane().add(plusButton);

    JButton subtractButton = new JButton("Subtract");
    subtractButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            try{
                int number1 = Integer.parseInt(firstNumber.getText());
            }
            catch (Exception exc){
                JOptionPane.showMessageDialog(frame,"Error: bad first number.");
                return;
            }
            try{
                int number2 = Integer.parseInt(secondNumber.getText());
            }
            catch (Exception exc){
                JOptionPane.showMessageDialog(frame,"Error: bad second number.");
                return;
            }
            int number1 = 0, number2 = 0;
            int answer = number1 - number2;
            answerLabel.setText("The answer is: "+answer);
        }
    });
    subtractButton.setToolTipText("Subtracts first from second number");
    subtractButton.setBounds(157, 183, 117, 29);
    frame.getContentPane().add(subtractButton);

    JButton divideButton = new JButton("Divide");
    divideButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            try{
                int number1 = Integer.parseInt(firstNumber.getText());
            }
            catch (Exception exc){
                JOptionPane.showMessageDialog(frame,"Error: bad first number.");
                return;
            }
            try{
                int number2 = Integer.parseInt(secondNumber.getText());
            }
            catch (Exception exc){
                JOptionPane.showMessageDialog(frame,"Error: bad second number.");
                return;
            }
            int number1 = 0, number2 = 0;
            int answer = number1 / number2;
            answerLabel.setText("The answer is: "+answer);
        }
    });
    divideButton.setToolTipText("Divides first from second number");
    divideButton.setBounds(289, 183, 117, 29);
    frame.getContentPane().add(divideButton);

    textField_2 = new JTextField();
    textField_2.setBounds(216, 94, 130, 26);
    frame.getContentPane().add(textField_2);
    textField_2.setColumns(10);
}
}

【问题讨论】:

  • 1) Java GUI 必须在不同的语言环境中使用不同的 PLAF 在不同的操作系统、屏幕尺寸、屏幕分辨率等上工作。因此,它们不利于像素完美布局。而是使用布局管理器,或combinations of them 以及white space 的布局填充和边框。 2) 它在 NetBeans 中运行良好(有趣的是 only 因为它支持这是一个 IDE 问题,正如您显然怀疑的那样。)
  • 顺便说一句 - 另见calculator example。它使用ScriptEngine 来评估文本字段中的表达式。

标签: java eclipse swing


【解决方案1】:

啊!这是我之前遇到的一个问题。这个技巧解决了这个问题。这是怎么做的。

确保您已构建它。或者您可以启用 Project --> Build Automatically。

设置上述选项后,尝试清理工作区。项目 --> 清理并清理您导入的所有项目。

现在重启eclipse,你就可以启动你的程序了。

ps:如果不行,请用控制台发送eclipse的图片,这样我们就可以看到运行配置的日志和图片。

【讨论】:

  • 这太不可思议了——我刚刚清理了我的小 GUI 项目,现在它不再启动 GUI。如果我构建一个 jar 并运行它 - 那么它很好......厌倦了 Eclipse 生活......
猜你喜欢
  • 2014-03-13
  • 1970-01-01
  • 2013-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-03
相关资源
最近更新 更多