【问题标题】:Error when I tried to run my Java class on another computer?当我尝试在另一台计算机上运行我的 Java 类时出错?
【发布时间】:2015-12-20 01:49:17
【问题描述】:

我不是在做学校项目,所以请不要惊慌。我正在做一些私人编程来复习。我的程序是一个 .java 类型的程序,它创建了一个表单,该表单询问抽奖活动的边界和数量,并根据输入对生成进行操作。

这是我的问题。在我编写程序的 WINdows 2000 计算机上,完美地显示了自己。这只是故事的一半。当我试图将它放在另一台计算机上时,程序显示一个空白窗口;它编译并运行,但它显示一个空白窗口。现在,我确实认为版本号是因素,所以我将提供版本并要求确认这些是否是邪恶的根源。

在我原来的电脑是 Windows 2000 上,版本是 1.6.0_31-b05。另一台计算机是 Windows 7 双启动和 Linux Mint 17.2,分别运行 1.8.0_60-b27 和 1.8.0_00。

我的程序还没有完成,但我稍后会担心。我现在希望做的是让程序,就像它一样,在我所有计算机的平台上运行。由于 Java 以其可移植性而闻名,我希望它可以在我的所有计算机上运行。这是一种误解吗?

不管怎样,代码如下:

//Import class libraries
import javax.swing.*;              
import javax.swing.JOptionPane;              
import java.awt.*;     
import java.awt.event.*;

public class Lotterygui     //Begin class
{
    //VARIABLES FOR DATA COLLECTION
    private JTextField lowerRange;  //Lowest number
    private JTextField higherRange; //Highest number
    private JTextField quantity;    //How many numbers to generate
    private JTextArea displayArea;  //What to display when the program is in use

    //ADD WARNING CONSTANT FOR INVALID INPUT
    private final String WARNING = "Please fill out valid data "
                                   + "and not leave anything out. "
                                   + "Also,do not enter any " 
                                   + "zeroes.";    

    public Lotterygui() 
    {
        //GUI CONFIGURATION

        //Frame settings
        JFrame jfrFrame = new JFrame("Lottery Program");
        jfrFrame.setSize(300,400);
        jfrFrame.setLocationRelativeTo (null);
        jfrFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jfrFrame.setVisible(true);
        jfrFrame.setResizable(false);

        //Panel to hold the user input controls in place
        JPanel jplInputs = new JPanel();
        jplInputs.setLayout(new GridLayout(4, 2));

        //CREATE INPUT CONTROLS

        //Lowest range
        JLabel jlblLowerRange = new JLabel("Lowest");
        lowerRange = new JTextField();

        //Highest range
        JLabel jlblHigherRange = new JLabel("Highest");
        higherRange = new JTextField();

        //Quantity
        JLabel jlblQuantity = new JLabel("Quantity");
        quantity = new JTextField();

        //Buttons and their respective action associations

        //Generate numbers button
        JButton jbtnGenerate = new JButton("Generate");
        ActionListener alGenerate = new listenGenerate();
        jbtnGenerate.addActionListener(alGenerate);

        //Reset all values button
        JButton jbtnReset = new JButton("Reset");
        ActionListener alReset = new listenReset();
        jbtnReset.addActionListener(alReset);        

        //ADD CONTROLS TO FORM
        jplInputs.add(jlblLowerRange);
        jplInputs.add(lowerRange);
        jplInputs.add(jlblHigherRange);
        jplInputs.add(higherRange);
        jplInputs.add(jlblQuantity);
        jplInputs.add(quantity);
        jplInputs.add(jbtnGenerate);
        jplInputs.add(jbtnReset);

        //CREATE DISPLAY AREA AND ADD

        //The display area used for showing generated numbers
        displayArea = new JTextArea();
        displayArea.setLineWrap(true);
        displayArea.setText(WARNING);

        //The control that sets autoscrolling for the display area
        JScrollPane jspDisplayArea = new JScrollPane(displayArea);
        jfrFrame.add(jspDisplayArea);

        //Add the JPanels to the window
        jfrFrame.add(jplInputs, BorderLayout.NORTH);
        jfrFrame.add(jspDisplayArea);            
    }//END lotteryGUI constructor

//MAIN Method
public static void main (String[] args)
{
    //CALL UP lotteryGUI CLASS
    new Lotterygui();
}//END Main method

//GENERATE BUTTONS ACTION    
private class listenGenerate implements ActionListener
{
    public void actionPerformed(ActionEvent e)
    {
        //DECLARE VARIABLES
        int low;        //Lowest number
        int high;       //Highest number
        int qty;        //How many numbers

        try //Monitor the input of above variables in the form
        {
            low =  Integer.parseInt(lowerRange.getText());
            high = Integer.parseInt(higherRange.getText());
            qty = Integer.parseInt(quantity.getText());                
        }
        catch (NumberFormatException nfe)
        {
            //RESET ALL FORM VALUES
            reset();

            //RESET VARIABLE VALUES
            low = 0;
            high = 0;
            qty = 0;                
        }//END format errors try-catch

        //CHECK IF PROGRAM CAN CONTINUE
        if (low != 0 || high != 0 || qty != 0) //If valid
        {
            //Action pending
            displayArea.setText("Generate here - incomplete");
        }
        else    //If there are more one or more errors in the input
        {
            //ISSUE WARNING
            JOptionPane.showMessageDialog(null, WARNING);

        }//END IF continue CHECK
    }//END actionPerformed method
}//END listenGenerate class

我一直在上下查看代码。这可以说我没有引用导入中概述的任何布局吗?我知道这不是 JPanel,因为我确实尝试过仍然存在问题。任何对我有帮助的东西都将不胜感激。谢谢你。

【问题讨论】:

    标签: java swing window jpanel grid-layout


    【解决方案1】:

    你在打电话

    jfrFrame.setVisible(true);
    

    首先,然后将一堆组件添加到 JFrame,这是倒退的,可能导致 GUI 在调整大小或最小化和恢复之前不会呈现组件。事实上试试这个——运行你的程序,然后最小化空白的 GUI 并恢复它,我敢打赌你会看到你的组件。

    我建议您交换这个顺序 -- 在将所有内容添加到 GUI 后调用 jfrFrame.setVisible(true);last

    【讨论】:

    • 哇,谢谢!你帮了我很多。我想我可以从这里拿走。
    • 但是我有一个疑问:为什么我最初编写此程序的计算机上的版本没有那个问题?程序运行良好,窗口首先出现!
    • @RobertX:很难说。是在不同平台上运行的不同 JVM 碰巧让不正确的程序看起来是正确的。
    • 谢谢,我不敢相信就是这样。我想现在我应该在 Java 课上做白日梦。 :)
    猜你喜欢
    • 2017-12-10
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-27
    相关资源
    最近更新 更多