setVisible后没有执行类文件(true)

时间:2018-01-16 12:29:56

标签: java netbeans raspberry-pi3 gpio

我在使用Pi4J库导入的Raspberry Pi 3上使用Netbeans 8.2。

这里的问题是 Login.java 不会在 MainForm.java public static void main(String args[])内执行编写的代码。但是,只要我通过右键单击并选择“运行文件”直接运行它,MainForm.java中的代码就可以运行,但是当我运行整个项目时,就是问题开始的时候。

以下是Login.java的代码:

package Kiosk;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;


public class Login extends javax.swing.JFrame {

    public Login() {
        initComponents();

        jLabel_asterisk1.setVisible(false);
        jLabel_asterisk2.setVisible(false);
        jPanel1.getRootPane().setDefaultButton(jButton_login);

    }

    @SuppressWarnings("unchecked")


    private void jButton_loginActionPerformed(java.awt.event.ActionEvent evt) {                                              
        //asterisk required
        jLabel_asterisk1.setVisible(false);
        jLabel_asterisk2.setVisible(false);

        if(jTextField_username.getText().equals("")){

        jLabel_asterisk1.setVisible(true);

        }

        if(String.valueOf(jPasswordField.getPassword()).equals("")){


            jLabel_asterisk2.setVisible(true);

        }

        else{


        Connection con = MyConnection.getConnection();
        PreparedStatement ps;

            try {
                ps = con.prepareStatement("SELECT * FROM users WHERE username = ? AND password = ?");
                ps.setString(1, jTextField_username.getText());
                ps.setString(2, String.valueOf(jPasswordField.getPassword()));

                ResultSet rs = ps.executeQuery();

                if(rs.next()){

                    MainForm mf = new MainForm();
                    mf.setVisible(true);
                    mf.pack();
                    mf.setLocationRelativeTo(null);

                    MainForm.jLabel_welcome.setText(jTextField_username.getText());

                  this.dispose();   

                }

                else{

                    System.out.println("NO");
                }

            } catch (SQLException ex) {
                Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
            }

        }

    }                                             

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Login().setVisible(true);
            }
        });



    }

}

对于MainForm.java

package Kiosk;

import javax.swing.JLabel;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;

import com.pi4j.wiringpi.Gpio;
import com.pi4j.wiringpi.GpioInterrupt;
import com.pi4j.wiringpi.GpioInterruptListener;
import com.pi4j.wiringpi.GpioInterruptEvent;
import com.pi4j.wiringpi.GpioUtil;

public class MainForm extends javax.swing.JFrame {

    public static volatile int pulses = 0;
    public static boolean display = true;

    public MainForm() {
        initComponents();


}
    @SuppressWarnings("unchecked")

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new MainForm().setVisible(true);

            }

        });

        //create listener //bill coin pulses
        GpioInterrupt.addListener(new GpioInterruptListener() {
            @Override
            public void pinStateChange(GpioInterruptEvent event) {

                if (event.getPin() == 0) {
                    if (event.getState() == false) {
                        pulses++;
                        display = true;
                    }

                }

                if (event.getPin() == 7) {
                    if (event.getState() == false) {
                        int bpulses = 0;
                        bpulses++;
                        pulses += bpulses * 10;
                        display = true;
                    }

                }

            }

        });

        //setup wiring pi
        if (Gpio.wiringPiSetup() == -1) {
            System.out.println("Setup Failed!");
            return;
        }

        //pins that will be used
        GpioUtil.export(7, GpioUtil.DIRECTION_IN);
        GpioUtil.export(0, GpioUtil.DIRECTION_IN);

        //edge state whether rising, falling or change
        GpioUtil.setEdgeDetection(7, GpioUtil.EDGE_FALLING);
        GpioUtil.setEdgeDetection(0, GpioUtil.EDGE_FALLING);

        //enabling input as a callback
        Gpio.pinMode(7, Gpio.INPUT);
        Gpio.pullUpDnControl(7, Gpio.PUD_UP);
        GpioInterrupt.enablePinStateChangeCallback(7);

        //enabling input as a callback
        Gpio.pinMode(0, Gpio.INPUT);
        Gpio.pullUpDnControl(0, Gpio.PUD_UP);
        GpioInterrupt.enablePinStateChangeCallback(0);

        //void loop
        for (;;) {
            //Thread.sleep(5000);
            if (display == true) {
                // System.out.println(pulses);
                jTextField_pulses.setText(String.valueOf(pulses));
                display = false;
            }

        }

    }

}

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题是你在使用Login.java中的MainForm时没有调用MainForm.java中的main方法。

原因是main方法是程序的入口点而不是你的课程。这就是为什么整个程序中通常只有一种主要方法。如果运行Login.java,则在main方法中输入程序。但是,当调用MainForm时,您已经在程序中,因此它不再调用main。同样,当您单独运行MainForm.java时,它需要输入程序并运行main。

建议的解决方案: 用另一种方法(称为initializePinListening左右)将Main从MainForm.java中移出并调用它。

只是为了记录,有一个东西作为课程的入口点。方法是static{}。但我认为这里使用它的代码风格很糟糕。