Tạo đối tượng lưu thông tin đăng nhập khi kết nối với CSDL

Em có một thư viện tiện ích (Bài tập mẫu):

package helper;
public class shareHelper {
      /**
       * Ảnh biểu tượng của ứng dụng, xuất hiện trên mọi cửa sổ
       */
    public static final Image APP_ICON;
    static{
        // Tải biểu tượng ứng dụng
        String file = "";
        APP_ICON = new ImageIcon(shareHelper.class.getResource(file)).getImage();
        
    }
    /**
     * Sao chép file logo chuyên đề vào thư mục logo
     * @param file là đối tượng file ảnh
     * @return chép được hay không
     */
    public static boolean saveLogo(File file){
        File dir = new File("logos");
     // Tạo thư mục nếu chưa tồn tại
    if(!dir.exists()){
        dir.mkdirs();
    }
    File newFile = new File(dir, file.getName());
    try {
        // Copy vào thư mục logos (đè nếu đã tồn tại)
        Path source = Paths.get(file.getAbsolutePath());
        Path destination = Paths.get(newFile.getAbsolutePath());
        Files.copy(source, destination, StandardCopyOption.REPLACE_EXISTING);
        return true;
    }
    catch (Exception ex) {
        return false;
    }
    }
    /**
     * Đọc hình ảnh logo chuyên đề
     * @param fileName  là tên file logo
     * @return ảnh đọc được
     */
    public static ImageIcon readLogo(String fileName){
        File path = new File("logos", fileName);
        return new ImageIcon(path.getAbsolutePath());
    }
    /**
     * Đối tượng này chứa thông tin người sử dụng sau khi đăng nhập
     */
    public static NhanVien USER;
    /**
     * Xóa thông tin của người sử dụng khi có yêu cầu đăng xuất
     */
    public static void logoff() {
        shareHelper.USER = null;
    }
    /**
     * Kiểm tra xem đăng nhập hay chưa
     * @return đăng nhập hay chưa
     */
    public static boolean authenticated() {
        return shareHelper.USER != null;
    }

}

Khi em gọi hàm đăng nhập thì bị lỗi ngay chỗ: shareHelper.USER = nhanVien;.
Mọi người giúp em sửa lỗi với ạ.

void login(){
        String manv = txtMaNV.getText();
        String matKhau = new String(txtMatKhau.getPassword());
        try {
        NhanVien nhanVien = dao.findByld(manv);
        if(nhanVien != null){
            String matKhau2 = nhanVien.getMatKhau();
        if(matKhau.equals(matKhau2))
        {   
            shareHelper.USER=nhanVien;
            DialogHelper.alert(this, "Đăng nhập thành công !");
            this.dispose();
        }
        else{
            DialogHelper.alert(this, "Sai mật khẩu!");
        }
        }
        else{
            DialogHelper.alert(this, "Sai tên đăng nhập!");
        }
        }
        catch (Exception e) {
            DialogHelper.alert(this, "Lỗi truy vấn dữ liệu!");
        }
    }

Có thông báo lỗi không bạn?
Mình cần nó.

3 Likes

Đây bạn.
Mình nhấn vào thì nó chuyển lên dòng shareHelper.USER=nhanVien;.

 Exception in thread "AWT-EventQueue-0" java.lang.ExceptionInInitializerError
	at polypro.DangNhapJDialog.login(DangNhapJDialog.java:50)
	at polypro.DangNhapJDialog.btnDangNhapActionPerformed(DangNhapJDialog.java:189)
	at polypro.DangNhapJDialog.access$100(DangNhapJDialog.java:19)
	at polypro.DangNhapJDialog$2.actionPerformed(DangNhapJDialog.java:120)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
	at java.awt.Component.processMouseEvent(Component.java:6539)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
	at java.awt.Component.processEvent(Component.java:6304)
	at java.awt.Container.processEvent(Container.java:2239)
	at java.awt.Component.dispatchEventImpl(Component.java:4889)

Có lỗi trong quá trình khởi tạo tĩnh của lớp shareHelper.
Chính xác là file đang trống ("") nên dòng:

        APP_ICON = new ImageIcon(shareHelper.class.getResource(file)).getImage();

Sẽ quăng ngoại lệ.
Ngoại lệ bất kì được quăng ra trong phạm vi của:

static{

}

Sẽ trở thành java.lang.ExceptionInInitializerError.

3 Likes

thế fix như nào vậy bạn…giúp mình với
Mình thêm String file = “/polypro/icon/anh.png”
chạy nó cũng ra lỗi như vây

Đường dẫn không đúng thì lỗi thôi. Để chạy thử các chức năng khác trước, để dòng đó vào try - catch luôn.

3 Likes

cám ơn bạn…để mình thử

Bạn ơi…minh thay đổi đương dẫn hoài nhưng không được vẫn bị lỗi đó…Có lỗi nào khác không bạn

Bạn dùng try - catch bao nó chưa. Tạm thời đừng quan tâm nó nữa. Lo mà thử các chức năng khác. Chỉ vì cái biểu tượng của ứng dụng mà bỏ luôn chức năng khác?

Phương thức Class.getResource() lấy tài nguyên từ tập tin thực thi (.jar) của nó.
Bạn chắc rằng đường dẫn đúng?
Tham khảo:

3 Likes

các chưc năng khác thì ổn…Có chổ đó là bị lỗi…mình đã kiểm tra đương dẫn kĩ rồi nhưng không biết tại sao

Thế ngoại lệ ở dòng:

APP_ICON = new ImageIcon(shareHelper.class.getResource(file)).getImage();

Mà bạn bắt được là gì?

3 Likes

cũng không thể bao nó băng try - catch

Vậy thì bỏ dòng đó đi. Vì trong chính dòng đó có gọi đến shareHelper.
Và thay vì gọi đến hàm dựng tĩnh, bạn hãy gọi nó ở hàm tĩnh khác. Hàm dựng tĩnh mà lỗi thì nguyên mẫu của lớp sẽ không được khởi tạo và chẳng chạy được.

3 Likes

cám ơn bạn…để mình thay

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?