当我尝试在另一台计算机上 运行 我的 Java class 时出错?

Error when I tried to run my Java class on another computer?

我不是在做学校项目,所以请不要惊慌。我正在做一些私人编程来温习一下。我的程序是 .java 类型的程序,它创建了一个表格,要求抽奖的边界和数量 activity 并根据输入进行生成。

这是我的问题。在我编写程序的 WIndows 2000 计算机上,完美地展示了自己。这只是故事的一半。当我试图把它放在另一台电脑上时,程序显示空白window;它编译和 运行s,但它显示空白 window。现在,我确实认为版本号是一个因素,所以我会提供版本号并要求确认它们是否是罪魁祸首。

我原来的电脑是Windows2000,版本是1.6.0_31-b05。另一台计算机 Windows 7 双引导 Linux Mint 17.2,分别是 运行ning 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,因为我确实尝试过问题仍然存在。任何对我有帮助的事情都将不胜感激。谢谢你。

您正在呼叫

jfrFrame.setVisible(true);

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

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