4
votes

I finished my project (in NetBeans) and i export Jar file (i set my main class in project properties correctly before exporting Jar):

enter image description here

Now, This is my JAR:

enter image description here

This Error shown when i run the Jar (in command line page):

Could not find or load main Class on JAR executing

This is my MANIFEST.MF information:

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.9.1
Created-By: 1.7.0_11-b21 (Oracle Corporation)
Class-Path: lib/mysql-connector-java-5.1.18-bin.jar
X-COMMENT: Main-Class will be added automatically by build
Main-Class: Project.LoginFrame

All of my classes are here:

enter image description here

I try in command line too:

enter image description here

My project executed at this time, But all pictures (that are in a folder) not displayed, and also an sql Exception happens:

enter image description here

Update:

package Project;

import javax.imageio.ImageIO;
import javax.swing.*;
import javax.swing.plaf.nimbus.NimbusLookAndFeel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.sql.*;

public class LoginFrame extends javax.swing.JFrame implements ActionListener {

String dbUrl = "jdbc:mysql://localhost/Library";
private char[] Password;
private JButton ClearBtn,ExitBtn,LoginBtn;
private JLabel ErrorLbl;
private JComboBox comboBox;
private JLabel lbl1;
private JLabel lbl2;
private JLabel lbl3;
private String[] enterUserInf = new String[4];
private JPasswordField passwordField;
private JTextField usernameTF;

public LoginFrame() {
    initComponents();
    this.getRootPane().setDefaultButton(LoginBtn);
    comboBox.addActionListener(this);
    setVisible(true);
}

public static void main(String args[]) throws IOException {
    new LoginFrame();
}

private void initComponents() {
    //...
}

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

    try {
        if (comboBox.getSelectedIndex() == 0) {
            ErrorLbl.setText("Select A Model...");
            ErrorLbl.setVisible(true);
            return;
        }

        Password = passwordField.getPassword();

        if (!passwordControl()) {
            return;
        }

        if (comboBox.getSelectedIndex() == 1) {
            if (userEnterCondition(Password)) {
                this.setVisible(false);
                new BookPage_User(enterUserInf, enterUserInf[0]);
            } else {
                ErrorLbl.setText("Incorrect Password!");
            }
        }

        if (comboBox.getSelectedIndex() == 2) {
            if (adminEnterCondition(Password)) {
                this.setVisible(false);
                new MainFrame().setVisible(true);
            } else {
                ErrorLbl.setText("Incorrect Password!");
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
        ErrorLbl.setText("Enter Correct Input");
    }

}

private void ExitButtonActionPerformed(java.awt.event.ActionEvent evt) {
    System.exit(0);
}

private void ClearButtonActionPerformed(java.awt.event.ActionEvent evt) {
    passwordField.setText("");
}

public boolean passwordControl() {
    Password = passwordField.getPassword();
    if (String.valueOf(Password).trim().isEmpty()) {
        ErrorLbl.setText("Empty Password!");
        ErrorLbl.setVisible(true);
        return false;
    }
    return true;
}

public boolean adminEnterCondition(char[] pass) {
    Connection con;
    PreparedStatement preparedStatement;
    ResultSet resultSet;
    String query = "Select * From adminLogin";
    String password = null;
    try {
        con = DriverManager.getConnection(...);
        preparedStatement = con.prepareStatement(query);
        resultSet = preparedStatement.executeQuery();
        while (resultSet.next()) {
            password = resultSet.getString("ID");  // Get column value by name column name
            if (password.equalsIgnoreCase(String.valueOf(pass))) {
                return true;
            }
        }

    } catch (SQLException sqle) {
        sqle.printStackTrace();
        return false;
    }
    return false;
}

public boolean userEnterCondition(char[] pass) {
    Connection con;
    PreparedStatement preparedStatement;
    ResultSet resultSet;
    String query = "Select * from users";
    String password = null;
    try {
        Class.forName("com.mysql.jdbc.Driver");
        con = DriverManager.getConnection(...);
        preparedStatement = con.prepareStatement(query);
        resultSet = preparedStatement.executeQuery();
        while (resultSet.next()) {
            password = resultSet.getString("User_ID");
        }

    } catch (SQLException sqle) {
        return false;
    } catch (ClassNotFoundException cnfe) {
    }
    return false;
}

@Override
public void actionPerformed(ActionEvent e) {
    if (e.getSource() == comboBox) {
        if (comboBox.getSelectedIndex() == 1) {
            usernameTF.setText("User");
            usernameTF.setEditable(false);
            passwordField.requestFocusInWindow();
            ErrorLbl.setVisible(false);
        } else if (comboBox.getSelectedIndex() == 2) {
            passwordField.requestFocusInWindow();
        }
    }
}
}
2
Did you export it as "a runnable jar file" or just a jar file?ltalhouarne
try without compression, I recall there were problems with compressed jars beforeuser784540
@user3808021: Never did used any IDE before, so cannot tell much about how NetBeans work, but in some time, will try to create one small project, that you might can run on command prompt. Will let you know soon.nIcE cOw
@nIcEcOw Finally i can run jar file of my project successfully, But there is one little problem, jar file cannot connect to my Database (MySQL), Why?user3808021
@user3808021: You have to keep the MySql connector.jar on the classpath of your JAR file, just like what I did, with derby.jar with my application, do read that manifest.txt we creatednIcE cOw

2 Answers

4
votes

Open your jar file with WinRAR or a similar program. Then go to the META-INF folder and open the MANIFEST.MF. Make sure the property "Main-Class: your.class.path" is correct.

2
votes

So,here comes an error to the problem---why have you mentioned con = DriverManager.getConnection(...); in your code?

And hence your code is catching SQL Exception!!! This is the source of error :-

public boolean userEnterCondition(char[] pass) {
Connection con;
PreparedStatement preparedStatement;
ResultSet resultSet;
String query = "Select * from users";
String password = null;
try {
    Class.forName("com.mysql.jdbc.Driver");
    con = DriverManager.getConnection(...);     //error in this line

................. and so on.

Replace it with

con =DriverManager.getConnection("jdbc:mysql://localhost/Library?" +
                               "user=yourusername&password=yourpassword");

I hope this helps.If still getting error,please comment below!