Toggle Theme Editor
Slate Blueberry Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Charcoal

Cách Convert Char To String For Mail Or Database

Discussion in 'Xây dựng các ứng dụng Java khác, các vấn đề khác' started by kienxx, 29/4/18.

  1. kienxx

    kienxx Member

    Code:
    private void formKeyPressed(java.awt.event.KeyEvent evt) {                               
          if (evt.getKeyCode() == KeyEvent.VK_ENTER)
            {
                System.out.println(s);                // in ra console thì ok. Nhưng send to mail or Mysql thì lỗi
                s = "";
            }
           else
           {
                  String str = String.valueOf(evt.getKeyChar());
        // String str = Character.toString(evt.getKeyChar());    // Thử cả cách này cũng ko được
                  s = s + str;
           }
        }                          
    Thêm vô database mysql thì dấu chấm đen ah (mình để type cột dạng TEXT và VarChar đều vậy).
    Đây là dòng hiển thị khi gửi qua mail: "Lỗi rất đáng sợ".
     
  2. D.A.N_3002

    D.A.N_3002 Active Member

    Bạn đã thử Set đinh dạng trên MySQL thành utf8_unicode_ci để hiển thị tiếng Việt chưa ?
     
  3. kienxx

    kienxx Member

    Trước mình để utf8_bin
    Mình mới thử để TEXT và như DAN nói và cả VarChar cũng đều ko được :(
     
  4. D.A.N_3002

    D.A.N_3002 Active Member

    Bạn có thể cho mk bt bạn định làm j với code trên dc ko ?? Để có thể tìm cách khác để làm
    Theo mk có hai trường hợp lỗi xảy ra :
    - Cái String bạn convert bị lỗi. Nhưng nếu bạn in ra console đúng thì chắc không phải cái lỗi này.
    - Mail(Mk ko rõ cái này) hoặc DB không hiển thị Tiếng Việt. Để kiểm tra bạn có thể nhập một chuỗi ko dấu
     
  5. kienxx

    kienxx Member

    Gmail nên chắc là ko phải do ko hiển thị tiếng Việt, in ra console OK nhưng send dòng String đấy qua mail or lên database thì lỗi
    Mình làm là: Bắt sự kiện bấm phím, mỗi lần bấm 1 ký tự thì String = String + ký tự ấy. Khi bấm Enter thì gửi dòng String lên database
    Code ở trên mình post đó DAN, khác cái dòng System.out.println = lệnh gửi lên database thôi
     
  6. D.A.N_3002

    D.A.N_3002 Active Member

    Ok, mình biết lỗi này là j rồi :)) nó là ở phần xử lý chuỗi. Khi mà getKeychar ý, nếu như nó nhận ra là kết hợp với Keychar trước thành 1 ký tự UTF8 thì nó sẽ tạo thêm 1 lần getKeychar nx để lấy ký tự UTF8 đó. Vd: a + s = á thì khi hiển thị sẽ là : as á.

    Bây h bạn cần vt một hàm xử lý cho chn này thôi :)) Nếu có thể chờ thì mai mk sẽ nêu rõ cụ thể cách giải quyết :))
     
  7. kienxx

    kienxx Member

    Làm sao thế DAN ơi, thử khá nhiều cách thậm chí in ra file rồi lấy file send lên vẫn ko đc :v
     
  8. kienxx

    kienxx Member

    Mình ko sửa đc cách chuyển đổi trên, nhưng đã biết cách đọc đc dữ liệu dịch đó rồi, bằng cách đọc qua console :v.
    Nhưng bây giờ làm sao để dùng Thread chạy đoạn mã trên. Vì nếu bắt sự kiện thì jFrame phải đc focus. (mà cái này người dùng ko cần phải hiển thị jFrame lên).
    Mình viết thế này và bị báo lỗi "Exception in thread "Thread-2" java.lang.NullPointerException"
    Code:
    public void Check() {
        Thread re = new Thread() {
        @Override
        public void run(){
            while (true)
            {
                if (evt.getKeyCode() == KeyEvent.VK_ENTER)            //Báo lỗi dòng này
                {
                    System.out.println(s);
                    s = "";
                }
                else
                    {
                         String str = String.valueOf(evt.getKeyChar());
                         s = s + str;
                    }
                }
        }
    };
    re.start();         
    }
     
  9. D.A.N_3002

    D.A.N_3002 Active Member

    Bạn đặt void Check() này ở đâu ? Trong hay ngoài Listenner ?
     
  10. D.A.N_3002

    D.A.N_3002 Active Member

    Mình nghĩ cách này sẽ chỉ khả thi khi bạn run trên IDE chứ khi Build thành .jar hay .exe thì sẽ không dc. Vì Console của IDE sẽ khác Console của Window (mà Console của Window ko hiển thị dc tiếng Việt). Cái này là do charset của String s, Console của IDE sẽ hiểu dc charset đó nhưng File, DB hay Mail ko hiểu dc, bây h chỉ có tìm cách chuyển charset của String s là dc :))
     
  11. kienxx

    kienxx Member

    Nếu mà đặt trong Listener thì phải bắt sự kiện nó mới chạy, mà thế thì lại cần jFrame đc focus rồi mà
     
  12. kienxx

    kienxx Member

    Mình send lên database, sau đó viết 1 hàm get Table đó và run trên IDE :v
     
  13. D.A.N_3002

    D.A.N_3002 Active Member

    Phải đặt trong Listener thì bạn mới có MouseEvent evt chứ @@ Với lại để ngoài Listener thì void Check() sẽ không chạy, vì mỗi lần nhấn phím thì Listener bắt dc sẽ chạy code, còn Thread thì không có khả năng ấy
     
  14. D.A.N_3002

    D.A.N_3002 Active Member

    Để chắc bạn cứ build thành .jar và run thử ở ngoài nhé, xem console của Window có chạy dc như vậy ko
     
  15. kienxx

    kienxx Member

    DAN chưa hiểu ý mình. Ý mình là nếu để trong Listener, thì khi jFrame ẩn hoặc ko được focus, chương trình sẽ ko bắt event được ấy.
     
  16. D.A.N_3002

    D.A.N_3002 Active Member

    Nó bị lỗi như vậy là do không ở trong Listener đó bạn ạ, vì bị thiếu MouseEvent evt. Theo mk hiểu thì đoạn code trên bạn muốn nó luôn lấy Keychar kể cả khi mà JFrame bị ẩn đi đúng không nhỉ ?
     
  17. kienxx

    kienxx Member

    Đúng rồi DAN ơi, khi mà jFrame đc focus ngoài màn hình thì nó hoạt động, nhưng khi mình ẩn nó đi, hoặc focus cửa sổ window khác thì Listener nó ko hoạt động.
    Mình ko biết cho jFrame chạy giống window service thế nào nên mình tính dùng Thread. Mình dùng Thread chạy Scanner s = new Scanner (System.in) thì nó hoạt động ok, có điều System.in nó lại ko bắt đc UTF-8, cũng ko thể convert qua console IDE đc.
    Nên mình đang muốn nhờ sửa code trên để có thể chạy Thread, và get key event khi jFrame ko đc focus.
     
  18. D.A.N_3002

    D.A.N_3002 Active Member

    Vậy thì không dc đâu bạn ạ, bắt buộc phải có KeyListener thì mới có thể getKeyChar còn lại thì không thể :(
     
  19. D.A.N_3002

    D.A.N_3002 Active Member

  20. D.A.N_3002

    D.A.N_3002 Active Member

    Hình như còn có cách là : Bạn có thể dùng Advanced Installer để tạo bộ cài đặt ứng dụng thành Windows service., mk chưa thử cách này bao h @@
     

Chia sẻ trang này

Loading...