Võ Văn Hải's blog

Chỉ có một điều tuyệt đối đó là mọi thứ đều tương đối…

Lập trình java nâng cao

LẬP TRÌNH JAVA NÂNG CAO


Spring 2013

1. Study Guide

2. Slides:

  • Multi-threading 1ssp - 4ssp
  • Networking – Distributed Objects (v1: 2ssp4ssp)
  •  Database Programming (JDBC-JPA)
  • Servlet – JSP

3.


Spring 2012

  1. Study Guide 2012
  2. Slides: Multithreading, Collection, Networking, JDBC,

1. Study guide 2009Study guide 2010

2. Slides & examples 2009Slide ServletSlide JSP

3. Text Book 2009

4. Sách tham khảo

5. Software : JDK&Javadocs, JCreator, Eclipse, NetBeans

6. Bài tập:

Multi-threading 1, 2;

Collection;

Network Programming;

JDBC

7. Assignment


CÁC BÀI VIẾT LIÊN QUAN

1. Thread

2. Networking

3. RMI

4. JDBC

  1. Kết nối cơ sở dữ liệu
  2. Các thao tác cơ bản trong lập trình JDBC
  3. JPA – Java Persistence API
  4. Connection Factory
  5. Biểu diễn quan hệ mối quan hệ master-details bằng JTree – JTable
  6. Thao tác với Metadata
  7. Làm việc với Stored Procedure
  8. Updatable JTable – Cập nhật giá trị ngay khi có thay đổi
  9. Updatable JTable – Các thao tác CRUD trên JTable
  10. Chèn và đọc hình từ cơ sở dữ liệu

5. Các vấn đề khác

a. Các bài demo trên lớp:





273 Responses to “Lập trình java nâng cao”

  1. Vũ Anh Dũng said

    Em chào thầy Hải, em mới học Java và đang học cao học ở Korea, trong thời gian ngắn em phải hoàn thiện khả năng của mình về Java, thấy khó khăn thực sự vì nhiều lúc thấy mình mất căn bản trong lập trình, website của thầy rất hữu ích, giá như có thể trao đổi với thầy thường xuyên thì tốt biết mấy, vì em cũng muốn được trau giồi kiến thức và hoàn thành nhiệm vụ ở trường em đang học, mong thầy hồi âm cho em và mong thầy giúp đỡ em thêm.

  2. vovanhai said

    Bất cứ thứ gì bạn thắc mắc, nếu tôi có thể nói tôi sẽ nói. Giúp nhau học là điều mong muốn của tôi. Bạn cứ post các câu hỏi của bạn, tôi sẽ cố gắng trả lời.Chúc bạn thành công!

  3. SanSan said

    thưa thầy cho em hỏi cách làm wedbrowser mà ko d ùng url ạ, em get chữ từ 1 trang về được nhưng ko get hình ảnh để hiển thị lại được. cảm ơn thầy

  4. vovanhai said

    Không dùng url là sao? có phải bạn dùng Socket đọc nội dung của 1 trang web và muốn hiển thị nó không? Nếu vậy bạn có thể dùng JEditorPane để hiển thị, kể cả hình ảnh. Đây là 1 web browser đơn giản, bạn tham khảo nhé! Chúc vui.
    Simple Web Browser

  5. SanSan said

    Đúng ạ, em dùng socket, tự mở port và parser + render text và images nhưng không biết làm như thế nào cả, thầy có thể hướng dẫn em ko ạ?Cảm ơn thầy nhiều ạ.

  6. SanSan said

    thầy có thể hướng dẫn e cách GET và SAVE hình ảnh ko ạ?em cảm ơn thầy nhiều

  7. noluc said

    chào thầy.
    thầy cho em hỏi là sang học kỳ sau em học java nâng cao . java nâng cao này có phải là J2EE không vậy thầy hay là nó vẩn nằm trong j2SE dạ. nếu không phải thì, java nâng cao nó có liên quan mật thiết gì với J2EE không vậy thầy.
    thân thầy.

  8. nguyenthiminhtuyet said

    chao thầy.
    cho em hỏi .môn java2 này có phải là J2ee ko vậy thầy.
    nếu không phải thì nó là nền tảng để mình học tiếp J2EE phải hông vậy thầy.

  9. vovanhai said

    Java nâng cao ở đây chưa phải là J2EE nhưng nó là nền tảng để phát triển J2EE. Trong học kỳ tới tôi sẽ chỉnh lại đề cương 1 chút để thiên về J2EE hơn. Bạn hãy đọc trong study-guide sẽ biết mình học gì mà.
    Chúc mừng năm mới!

  10. thaituUS said

    chào thầy . chúc thầy 1 năm mới thành công và vui khòe.
    nhân tiện em có 1 vần đề chưa rõ , nhờ thầy trả lời:
    -dến học kỳ này học java nâng cao.chúng em có được học về:
    -Thiết kế và phát triển các ứng dụng Web cơ bản dùng JSP/Servlet,EJB.
    -Mô hình phát triển ứng dụng: MVC, Struts…
    không vậy thầy.hay là chúng em chỉ được học nhửng phần đề làm nền tảng để phát triển mấy cái trên như em nói thôi phải ko vậy thầy.
    thân.

  11. vovanhai said

    Khi học buổi đầu tiên, tôi sẽ giới thiệu cho bạn rõ nhé!

  12. DoDo said

    Chào thầy ! Trong quá trình thầy dạy có đưa ra một số ví dụ để minh họa cho slide bài giảng môn Java2.Do thời gian quá ngắn nên em chưa hiểu rõ lắm. Thầy có thể đưa lại các ví dụ đó để chúng em down về để làm tài liệu học thêm
    Cảm ơn thầy

  13. luongaptech said

    chào thầy Hải, em cũng đang hoc Java nhưng độ tư duy của em kowi kém vì căn bản ko được vững thầy có cách nào giúp em không ạ.
    cảm ơn thầy.

  14. huynh vu said

    thay oi xin thay cho em hoi
    em dung java de xuat du lieu tu sql len theo dang bang
    nhung lam sao de in ra giay theo mot dang ma minh format cho no
    vd: in mot file liet ke don dat hang gom co ten,thong tin khach hang,mat hang ma khach dat.

  15. vovanhai said

    Thì em chỉ lấy những fields mà em muốn in.
    rs=…
    String kq=””;
    while(rs.next){
    kq=rs.getString(“field1″)+”; “+rs.getString(“field2″)+…;
    }
    //sau đó xử lý kq
    Chúc vui!

  16. Huynh Vu said

    da cam on thay,
    nhung em con mot van de nua ah,
    em muon lay du lieu trong sql (mot bang nao do chang han) xuat ra thanh file excel
    vay em phai lam sao ah?
    em co doc o nhieu dien dan nhung ho khong co chi cach dung java de lam ah.
    xin thay chi giup ah.cam on thay.

  17. Khoa said

    Thầy ơi TreeSet,HashMap,TreeMap giống và khác nhau chỗ nào vậy

  18. vovanhai said

    đọc kỹ trong slides sẽ có câu trả lời nhé!

  19. Khoa said

    Thầy ơi em có bài nầy:

    package collections;

    public class MyWord implements Comparable{
    private String word;
    private String mean;
    public String getWord() {
    return word;
    }
    public void setWord(String word) {
    this.word = word;
    }
    public String getMean() {
    return mean;
    }
    public void setMean(String mean) {
    this.mean = mean;
    }
    @Override
    public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + ((word == null) ? 0 : word.hashCode());
    return result;
    }
    @Override
    public boolean equals(Object obj) {
    if (this == obj)
    return true;
    if (obj == null)
    return false;
    if (getClass() != obj.getClass())
    return false;
    MyWord other = (MyWord) obj;
    if (word == null) {
    if (other.word != null)
    return false;
    } else if (!word.equals(other.word))
    return false;
    return true;
    }
    public MyWord() {
    super();
    }
    @Override
    public String toString() {
    return this.getWord();
    }
    public MyWord(String word, String mean) {
    super();
    this.word = word;
    this.mean = mean;
    }
    @Override
    public int compareTo(MyWord o) {
    return this.getWord().compareToIgnoreCase(o.getWord());
    }

    }
    package collections;

    import java.util.HashMap;

    public class MyDic {
    private HashMapmydic;
    public MyDic() {
    mydic=new HashMap();
    }
    public boolean themTu(MyWord w) {
    if (mydic.containsValue(w)) {
    return false;
    }
    mydic.put(w.getWord(), w);
    return true;
    }
    public MyWord traTu(String word) {
    return mydic.get(word);
    }
    public boolean xoaTu(String word) {
    if (mydic.containsKey(word)) {
    mydic.remove(word);
    return true;
    }
    return false;
    }
    public int demSoTu() {
    return mydic.size();
    }
    }
    package collections;

    import java.awt.BorderLayout;
    import java.awt.Button;
    import java.awt.Dimension;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.KeyAdapter;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;

    import javax.swing.Box;
    import javax.swing.JButton;
    import javax.swing.JCheckBoxMenuItem;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.JTextField;
    import javax.swing.table.DefaultTableModel;

    public class MyDicGUI extends JFrame implements ActionListener{
    /**
    *
    */
    private static final long serialVersionUID = 1L;
    JTextField txtWord,txtMean;
    JTable table;
    DefaultTableModel dtm;
    JButton btnThem,btnTra;
    MyDic mydic=new MyDic();
    JLabel lblNghia;

    public MyDicGUI() {
    setSize(600,600);
    setTitle("Từ điển");
    setDefaultCloseOperation(EXIT_ON_CLOSE);

    Box box=Box.createVerticalBox();
    Box box1=Box.createHorizontalBox();
    Box box2=Box.createHorizontalBox();
    Box box3=Box.createHorizontalBox();
    Box box3a=Box.createHorizontalBox();
    Box box4=Box.createVerticalBox();

    box1.add(new JLabel("Từ:"));box1.add(txtWord=new JTextField());
    txtWord.addKeyListener(new KeyAdapter(){
    public void keyPressed(KeyEvent e) {
    if (e.hashCode()!=-1) {
    String s=txtWord.getText();
    //String kq="";
    //System.out.println(dtm.getValueAt(999, 0).toString().substring(0, 2));
    for (int i = 0; i =s.length()) {
    if (s1.substring(0, s.length()).equalsIgnoreCase(s)) {
    //System.out.println(s);
    System.out.println(s+";"+s1);
    }
    }
    }
    }
    }
    });
    box2.add(new JLabel("Nhĩa:"));box2.add(txtMean=new JTextField());
    box3.add(btnThem=new JButton("Thêm"));btnThem.addActionListener(this);
    box3.add(btnTra=new JButton("Tra"));btnTra.addActionListener(this);
    box3a.add(lblNghia=new JLabel());
    lblNghia.setPreferredSize(new Dimension(300,30));

    String []head={"Từ","Nghĩa"};
    dtm=new DefaultTableModel(head,0);
    box4.add(new JScrollPane(table=new JTable(dtm)));

    /*new Thread(
    new Runnable() {
    public void run() {
    int i=0;
    while (i < 1000) {
    mydic.themTu(new MyWord("" + i, "so thu:" + i));
    String[] s = { "" + i, "so thu:" + i };
    dtm.addRow(s);
    i++;
    }
    }
    }).start();*/
    int i=0;
    while (i < 1000) {
    mydic.themTu(new MyWord("" + i, "so thu:" + i));
    String[] s = { "" + i, "so thu:" + i };
    dtm.addRow(s);
    i++;
    }
    box.add(box1);
    box.add(box2);
    box.add(box3);
    box.add(box3a);

    this.add(box,BorderLayout.NORTH);
    this.add(box4,BorderLayout.CENTER);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
    Object o=e.getSource();
    if (o.equals(btnThem)) {
    try {
    if (txtWord.getText()!=null) {
    mydic.themTu(new MyWord(txtWord.getText(),txtMean.getText()));
    String []s={txtWord.getText(),txtMean.getText()};
    dtm.addRow(s);
    }
    } catch (Exception e2) {
    e2.printStackTrace();
    }
    }
    if (o.equals(btnTra)) {
    lblNghia.setText(mydic.traTu(txtWord.getText()).getMean());
    }
    }
    public static void main(String[] args) {
    new MyDicGUI().setVisible(true);
    }
    }

    ———————————————————-
    Vấn đề ở chỗ:Khi em chạy MyDicGUI với mong muốn là mỗi sự kiện keypress ở txtWord thì sẽ in ra những từ giống với từ ở txtWord.text ,thế mà khi chạy nó không in ở keypress lần đầu mà in ở keypress lần sau???
    Đoạn code:

    txtWord.addKeyListener(new KeyAdapter(){
    public void keyPressed(KeyEvent e) {
    if (e.hashCode()!=-1) {
    String s=txtWord.getText();
    for (int i = 0; i =s.length()) {
    if (s1.substring(0, s.length()).equalsIgnoreCase(s)) {
    System.out.println(s+";"+s1);
    }
    }
    }
    }
    }
    });

    ———————————————-
    Với lai thầy chỉ em cách setSelected của JTalbe
    Em cám ơn thầy nhiều.

  20. Khoa said

    Em sửa lại tí:Chuỗi ở txtWord giống các Chuỗi phẫn đầu của word

  21. vovanhai said

    Đây là đoạn code mà khi ta gõ lên textField, tương ứng phần tử trong 1 list sẽ được chọn (giống lạc việt Tđ)
    public void keyReleased(KeyEvent e) {
    if(e.getKeyCode()==10){
    tfWord.setText(listWords.getSelectedValue().toString());
    tfWord.selectAll();
    selWord=(MyWord)listWords.getSelectedValue();
    Lookup(tfWord.getText());
    return;
    }
    for (int i = 0; i < dlm.size(); i++) {
    MyWord word=(MyWord)dlm.get(i);
    if(word.getWord().startsWith(tfWord.getText().trim())){
    listWords.setSelectedValue(word, true);
    break;
    }
    }
    }

  22. Khoa said

    Em cám ơn thầy,em làm được rồi và em cũng hiểu lỗi cua em.
    if (e.hashCode()!=-1) {

    đoạn code đó để làm gì vậy thầy

  23. tèo said

    Thầy ơi em dùng FileInputStream.read(buf); để đọc một file nhạc. cái đó trả về kiểu “int” vậy làm sao em chuyển thành kiển byte được thầy. Em mới học java mong thầy thông cảm.
    Cảm ơn thầy!

  24. changngoc said

    Chào thầy!
    Em làm thử cái demo phân kết nối java với SQL server. Em đã cài SQL Server 2000 Driver for JDBC xong. Nếu em viết bằng Jcreator thì chạy bình thường. Nhưng khi em viết bằng Eclipse thì lại báo lổi :”[Microsoft][ODBC Driver Manager] Invalid cursor state” Mặc dù em đã right-click vào cái Project chọn Build Path –>Configure Build Path… –> libraries –> add Extenal Jar…và chọn 3 file “msbase.jar,mssqlserver.jar và msutil.jar” nhưng vẫn báo lổi trên.
    Nếu Eclipse không chạy được cái này thì khi thi giữa kỳ em viết bằng Jcreator dược không thầy.

    Have a nice day!

  25. vovanhai said

    Em dùng driver 2005 đi. chỉ có 1 file thôi. Tôi đã demo trên lớp ngon lành rồi mà!

  26. vovanhai said

    Trả về kiển int là do khi đọc hết file, giá trị -1 sẽ trả về, còn dữ liệu được lưu trong tham số buf .

  27. HuynhTrang said

    Chào thầy , Em có một vài thắc mắc về Java ! Nhưng chưa tìm cách giải quyết được rât mong thầy có thể giúp em ! Em có viết một phần mềm quản lí nhỏ sử dụng công cụ NetBean . Nhưng do mới bắt đầu nghiên cứu về java nên em không biết làm thế nào để in bao cáo thống kê đơn đặt hàng ? .Em không biết trong java có đối tượng nào giống đối tượng DataSet ,DataTable,DataView của C# không .Khi viết xong một phần mềm thì làm sao em có thể đóng gói để khi người dùng cài đặt phần mềm không cần máy ảo Java thì nó vẩn chạy được ? Rất mong thầy có thể giúp em trong thời gian ngắn nhất . Cám ơn thầy !

  28. vovanhai said

    báo cáo thống kê thì em có thể dùng html report để in. Em tham khảo thêm ở phần lập trình java nâng cao trong trang này để biết thêm. Hoặc em có thể dùng 1 loại báo cáo chuyên nghiệp nào đó.
    Trong java, đối tượng giống DataSet ,DataTable,DataView của C# đó là JTable, giải quyết vấn đề trên nó rất tốt.
    Còn vấn đề đóng gói em có thể tham khảo bài viết : http://vovanhai.wordpress.com/java/l%e1%ba%adp-trinh-java-can-b%e1%ba%a3n/dong-goi-1-%e1%bb%a9ng-d%e1%bb%a5ng-java-thanh-file-exe/
    Chúc vui!

  29. chao Thay,
    Thay vui long huong dan dum em cach cai dat apache TomCat trong eclipse,rat mong duoc su phan hoi som nhat cua Thay.Nhan dip toi ngay 30/4 em Chuc Thay va Cac Thanh Vien trong Gia Dinh Thay co nhung ngay nghi le vui ve.

  30. vovanhai said

    Trong Eclipse J2EE vào menu Window->References, 1 cửa sổ hiện ra. Phía bên trái là 1 cây liệt kê các mục cấu hình, bạn chọn đến thẻ Server, chọn tiếp mục Runtime Environments, Nhấn nút Add, chọn Apache->Apache Tomcat 6, nhấn Next, Nhấn nút Browse và tìm đến thư mục bạn giải nén Tomcat. Nhấn Finish. OK.

  31. xuất dữ liệu ra file word, excel said

    Em chào thầy , em đang gặp rắc rối trong việc xuất dữ liệu từ java ra file word,excel và pdf.Dữ liệu em load từ trong csdl mysql vào trong java thành các đối tượng và em muốn lưu xuống file word,excel, và pdf. Em mong thầy giúp đỡ. Em cảm ơn thầy.

  32. vovanhai said

    Về việc xuất ra excel thì bạn có thể dùng định dạng csv(Comma-separated values) và dạng này có thể dùng excel để mở. Đối với word thì thôi nghĩa bạn có thể xuất ra dạng html sau đó gán đuôi của file là doc thì word sẽ mở ngon lành.
    Còn đối với pdf thì bạn cần có 1 thư việc để xuất, cách làm như sau:
    – Bạn export dữ liệu ra xml(cái này dễ – dùng WebRowSet)
    – Dùng thư viện fop(http://xmlgraphics.apache.org/fop/) để chuyển ra pdf.

    Chúc vui!

  33. Nguyen Phuong Cung said

    Em chào thầy, hiện tại em đang muốn học một chút java, mong thầy hướng dẫn cho em vài điều cơ bản được không ạ, em cần vài ví dụ cơ bản về tạo form với swing( nhưng phải tạo form bằng tay, vì tụi em code trên JCreator) mong thầy cho em vài ví dụ để em có thể nghiên cứu, cám ơn thầy nhiều. Có gì mong thầy gửi giùm em vào mail: handsomeboy3091986@yahoo.com. Em mong tin thầy.

  34. thachthao said

    Thầy ơi, em đang sử dụng jsf để làm trang web, nhưng em đang gặp rắc rối. Dữ liệu của em được kết nối từ mysql. Em lấy dữ liệu lên và test trong model chạy bình thường, sau lúc em lấy lên hiển thị lên trang web thì nó bảo lỗi:
    “java.lang.ClassNotFoundException: com.mysql.jdbc.Driver”
    mặc dù em đã có add thư viện mysql vào project rồi. Em mong thầy gợi ý cho em phải làm sao để dữ liệu có thể hiện thị trên trang web.Em cảm ơn thầy.

  35. vovanhai said

    Em phải copy thư viện này vào thư mục WEB-INF\lib của project.

  36. NguyenPhamAnhDung said

    Thay oi.cho em hoi chung nao co danh sach cam thi java2 cua lớp NCTH1A vay thay em xin cam on thay

  37. Quyền said

    Dạ,em chào thầy!
    Em đang làm 1 bài về Multi Thread Socket Java Chat
    Em đã tìm hiểu nhiều demo trên mạng rồi.Đã thõa mãn Tính MutilThread trong xử lý của Server rồi
    Nhưng giờ em muốn Cái server của em nó xử lý Asynchronous mà dùng CallBack()
    Thầy giúp em với,em mó mẩm 2 ngày nay rồi mà chưa đạt hiểu quả!!!

  38. Quyen said

    Thầy ơi,giúp e với
    Em đang làm Asynchronous socket sử dụng CallBack()….em mò cả ngày rồi mà chưa ra,thầy cho em 1 hướng đi đc ko?
    CallBack là hàm sẽ tự động thực thi lại 1 hàm nào đó,thay vì sài while(true){…}
    mong thầy hồi âm sớm

  39. Quyen said

    em cam on thây nhìu

  40. Quyen said

    sao lâu wá chư`ng vâ.y thâ`y

  41. lê anh said

    Thưa thầy ! em muốn làm một chương trình bằng javaswingcho phép đăng nhập. Nhưng làm thế nào để người dùng có thể ấn enter để đăng nhập luôn thay vì phải click vào button login. Em cám ơn thầy!

  42. vovanhai said

    Cho nút lệnh lắng nghe KeyListener. lấy keycode=13 thì gọi action đăng nhập.

  43. thachphongphong said

    cho em hoi em su dung design pattern no bao loi import java…text; va` mot so cai nua ? khac phuc nhu the na`o a?

  44. Van Son said

    Thầy ơi , thầy có thể hướng dẫn chính xác cho em từng bước về việc xuất dữ liệu của 1 table vào 1 file PDF được ko thầy ?

  45. vovanhai said

    Vào trang này nhé: http://www.lowagie.com/iText/.

  46. duoichon said

    Chào thầy!
    Em đang làm project j2me bằng netbean, PC đóng vai trò server còn máy điện thoại ảo java là client. Tại server em có một mảng các số thực muốn truyền cho client, hiện em ko biết cách thiết lập kết nối server-client, em đã tìm hiểu các kết nối http,tcp,socket nhưng ko áp dụng được vào project của em, rất mong thầy cho em một vài hướng dẫn.
    Em cảm ơn thầy nhiều!

  47. Hoàng Thu Hoài said

    Em chào thầy!
    Thầy ơi cho em hỏi. em nhập Dữ liệu ở jTextFields nhưng khi nhấn nút save thì insert dữ liệu thành công. Nhưng dữ liệu không hiện lên bảng ngay mà phái thoát ra chạy lại thì nó mới hiện dữ liệu mình vừa mới nhập vào. Thầy giúp em load lại bảng jTable với. Em chân thành cảm ơn thầy!

  48. vovanhai said

    Bạn insert bằng SQL statement thì làm sao mà update ngay trừ khi bạn tự thêm vào table. Với lại JTable đâu phải là binding control kiểu datagrid view bean CS hoặc VB.net đâu. Tự đưa vào bạn ơi!

  49. Tran minh ly said

    Thầy có thể demo một ứng dụng xuất ra file Excel theo định dạng CVS không thầy, tại em đang làm ứng dụng quản lý điểm học sinh nên cần xuất báo cáo theo định dạng Excel.

  50. vovanhai said

    hình như có đâu đó trong blog rồi đấy nhỉ!

  51. Em co van de can hoi nhu sau: said

    viec load 1 file trong may tinh cua minh thi khong co van de, nhug jo em muon load ca 1 thu muc(or load ca mycomputer, tuc la trong may tinh cua minh co bao nhieu O thi load het len duoi dang tree nhu khi minh mo computer trong may)thi em chua biet giai quyet nhu the nao, rat mog dc an giup do a?

  52. vovanhai said

    Bạn mà load hết cả cấu trúc thư mục của đĩa thì có mà mất …. cả ngày. Bạn chỉ nên load 1 cấp ở root thôi rồi “mồi” cho nó để load tiếp khi user chọn thư mục họ cần mở. Tham khảo bài “Ứng dụng duyệt hình ảnh với CSharp”.
    Chúc vui!

  53. Nguyễn Trần Vũ said

    Chào thầy, thầy cho em hỏi, hiện tại em định làm 1 module phân quyển trong ứng dụng Java desktop của em, giờ nếu là cách bình thường, thì em chỉ setVisible(false) cho các form mà user đó không có quyền dùng.
    Trong quá trình làm thì vấn đề nảy sinh là : trong 1 ứng dụng thực sự, việc phân quyền như vậy là không khả thi, em nghĩ theo hướng khác, vậy là em có 1 table t_User, 1 table t_Group, 1 table t_Role, ý em ở đây là : 1 group có nhiều user, và 1 group được phân quyển trong table t_Role, trong t_Role sẽ có các column như : view, edit, delete.

    Em mới suy nghĩ đến đây, có gì thiếu nhờ thầy hướng dẫn thêm giúp em. Cảm ơn thầy.

  54. duyen said

    mình vừa mới được tìm hiểu về lập trình mạng mà thầy lại cho lam báo cáo.cả tuần nay mình loay hoay mãi hỏi mấy bạn nhưng cũng chỉ hiểu 1 cách được sơ xài… số là mình qly nhân viên(maso,tennv,ngaysinh,que,diachi,chucvu, phai).mình muốn khi nhấn button ‘lưu’ thì all những gì mình nhập vào các textfile như trên được đưa vào SQL server và những dữ liêu đó lại load ngược lại hiển thị trên Jtable (quan ly thong tin nhan viên)bạn nào có thể giải thích giúp mình nguyên lý thực hiện,cũng như cách lam của những yêu cầu này không vậy. mình cảm ơn nhiều.có code thì càng ok. hihi..
    thân!

  55. duyen said

    không ai giúp mình hả?

  56. liên hệ blog này được giải đáp

  57. Chào thầy, em là sinh viên trường CDCN Đà Nẵng, em có một số vấn đề thắc mắc, mong thầy hướng dẫn giúp em
    Mục hỏi về JSF phải post vào link nào ạ, em chưa biết sitemap của blog này ra sao nên không biết cách để câu hỏi ở đâu cho phù hợp, mong thầy thông cảm.
    em đang tìm hiểu về công nghệ JSF, ban đầu là không biết hoàn toàn, em hiểu nôm na JSF gần giống như Swing và awt, một thư viện bao gồm các component có sẵn để lấy ra và dùng lại được, em không hiểu mô hình hoạt động của nó, theo kiểu kế thừa MVC(model controller view), trong thời gian chờ phản hồi của thầy em sẽ nghiên cứu thêm, thầy có thể giúp em tiếp cận JSF bằng cách nào dễ dàng nhất không ạ, chỉ cần hiểu khái niệm, kiến trúc hoạt động, máy chủ web chạy ứng dụng nhanh hay chậm hơn? vì em học chỉ tìm hiểu để viết báo cáo nên không cần yêu cầu gì nhiều. Mong thầy giúp đỡ, em xin cảm ơn ạ

  58. vovanhai said

    Bạn vào đây nhé: http://vovanhai.wordpress.com/web/jsf-java-server-face/

  59. Phúc Trường said

    thưa thầy Hải , tình cờ em lướt web vào đây , em đang có thắc mắc là , cái Eclipse của em ấy tại sao cái bình thường thì em gõ Syso và Ctrl + Space thì nó thành System.out.println(); mà giờ nó ko có cái gì hết thầy ơi, bất kỳ câu lệnh nào cũng thế , thầy cho em hỏi là nó làm sao ạ , mà khi mình chạy chương trình thì vẫn đc thầy ạ , có gì thầy hồi âm cho em với nha , em cám ơn thầy nhiều ạ .

  60. Huỳnh Kim Bách said

    Thưa thầy, em đang học ở Aptech Đà Nẵng, em mới học java, em có 1 assignment yêu cầu em phải tạo 1 Form có chức năng mở file *.txt, sửa chửa và sau đó lưu lại nhưng ngoài ra assignment còn có 1 yêu cầu nữa là khi người dùng nhấn nút exit, nếu file của người dùng đã được lưu lại thì Form sẽ thoát ra bình thường, nếu file của người dùng chưa lưu lại hoặc đã lưu nhưng nội dung được thay đổi thì Form sẽ hiện lên một thông báo ” Bạn có muốn lưu lại không ?” ( chức năng này giống notepad hoặc Microsoft office ). Mong thầy giúp cho.

  61. vovanhai said

    Menu Window->Reference, mở chọn mục Java trong cây bên trái, chọn tiếp Editor, chọn tiếp Template. Coi thử đã check hết chưa!

  62. vovanhai said

    Window->References->Java->Editor->Templates.
    Kiểm tra có và check chưa?

  63. Fjn said

    Thưa thầy, em vừa học xong lớp java2 của thầy. Em rất thích java.
    Nhưng em vẫn không biết để xin vào một công ty lập trình java thì em cần những kiến thức gì ? Thầy có thể gợi ý cho em được không ?

    Em cám ơn thầy. Chúc thầy một ngày vui vẻ !

  64. vovanhai said

    Học tốt J2EE là xin việc OK. Nó bao gồm nhiều thứ, chẳng hạn: Servlet,JSP, EJB,… . Cũng nên có 1 framework nào đó, chẳng hạn JSF, Struts,…
    Chúc thành công!

  65. giúp em bài tập này said

    em có chương trình này, Mong Thầy và anh. chị , em giúp dùm, cám ơn
    Viết ct nhập mảng số nguyên. tính trung bình cộng các số dương.dùng List để biểu diễn mảng số nguyên, phải có, các btton cho phép, thêm,xóa,sửa các phần tử của mảng

    cám ơn !

  66. lee said

    Thưa thầy, em có viết chương trình java sử dụng các thư viện java bên ngoài của các tổ chức khác(như: apache,w3c để theo tác với các loại dữ liệu: .pdf, .xsl, xml…) thì làm thế nào để thiết lập các thư viện đó mà import nó vào trong chương trình của mình được hả thầy. Và em có download các thư viện đó về rồi nhưng không biết cấu hình như thế nào. Thầy hay bạn nào vui lòng giúp em. (Em đang dùng editplus, eclipse-helios)

  67. Lee said

    Em đã tự trả lời được câu hỏi của mình rồi thầy ạ.

  68. Binh said

    Em chào Thầy ! Em đang viết một ứng dụng nhưng chưa biết cách tạo report va kết xuất report ra máy in ,kết xuất dữ liệu từ resultSet re dạng excel hay pdf như thế nào cả .Mong Thầy hướng dẫn cho em ! cảm ơn Thầy !

  69. destiny_68 said

    Xin chào thầy.
    Thầy có thể cho em biết định nghĩa của JEditorPane và các ứng dụng của nó được không?
    Em đang tìm tài liệu để làm bài giới thiệu về JEditorPane mà không tìm được nguồn thầy có thể giúp em không ạ?
    Các bạn có ai biết thì chỉ giúp mình luôn nha
    Cảm ơn thầy và mọi người

  70. Binh said

    Minh xin tra loi giup ban nhe: Ban go vao google : JEditorPane in java” thi no se cho ban mot loat link de ban tham khao. No cung rat de dung khong co gi kho lam dau. Ban co the tham khao theo link nay nhe :
    http://download-llnw.oracle.com/javase/1.5.0/docs/api/javax/swing/JEditorPane.html

  71. nguyenthanhtung said

    e moi bat dau hoc nam nay e cung thich mon java lam.nhung chua hiu j ve no.mong thay giup e.

  72. mai said

    Thay oi loi nay sua the nao :
    Error : Invalid path, \bin\javac.exe -g -classpath D:\java\baitap02 -d D:\java\baitap02 D:\java\baitap02\b2.java

  73. Võ Văn Hải said

    Em gõ lệnh kỳ quá. cài đặt lại PATH đi. Xem ở mục cài đặt JDK.

  74. mai said

    Thầy ơi ổ C của em dung lượng thấp nên em cài jdk và JCreator vào ổ D.Em đã sửa Path là
    ;%JAVA_HOME%\bin
    và thêm JAVA_HOME ở dưới .Nhưng khi chạy bài thì nó vẫn báo lỗi :
    Error : Invalid path, D:\java\jdk\bin\java.exe -classpath D:\JCreatorV4\baitap02 b2

    Process completed.
    Vậy phải sửa thế nào ạ.

  75. Võ Văn Hải said

    Có Jcreator rồi thì cần gì chạy bằng command line!

  76. ATM said

    Em xin chào thầy !
    Hiện nay em và 1 số bạn trong lớp đang cùng thảo luận làm 1 bài tập lớn về viết 1 chương trình phần mềm. Thầy có thể chỉ cho chúng em cách thức làm bài theo nhóm được không ạ?
    Nhân tiện đây Thầy bày cho em phương án tạo giả lập máy rút tiền tự động ATM, em mong được sự giúp đỡ của Thầy!

  77. Nguyễn Thành said

    Em chao thẩy thầy có thể giúp em demo form đăng nhập để giúp người dùng kết nối với csdl được không thầy? Em càm ơn thầy nhiều lắm!

  78. LeVanHuu said

    Em xin chào thầy !
    Thầy có thể chỉ cho em cách dùng DJ.Java Decompiler được không ạ ? Vì em được biết phần mềm này có thể sinh mã nguồn java.
    Em cảm ơn thầy và mọi người.

  79. Võ Văn Hải said

    Thầy chưa dùng bao giờ. :)

  80. Võ Văn Hải said

    Làm việc nhóm là cả 1 quá trình không phải như vài dòng trong là được. Nếu muốn hiểu rõ phải đọc thêm ở 1 số sách bàn luận về làm việc nhóm!

  81. NGUYÊN THÀNH said

    Em chào thầy! Em đang làm đổ án cuối kì về chia sẻ video từ server qua client và ngược lại. Em không biết nên bắt đầu tử đâu. Em rất mong sự giúp đỡ của thầy! Em cám ơn thầy rất nhiều! Cảm ơn thầy đã lắng nghe yêu cầu cùa em!

  82. Võ Văn Hải said

    Thực sự lúc này tôi quá bận nên chưa làm được. Xin lỗi bạn. Tôi sẽ cố gắng sớm.

  83. pham duc phung said

    thầy ơi! cho em hỏi làm thế nào để đưa tiếng việt vào trong java được zậy thầy!(ví dụ: trang login ,em muốn thay đổi chữ login —> thành Đăng nhập thì làm sao thầy?có cần phần mềm nào ko thầy?
    Mong thầy giúp dùm em ạ!em cảm ơn thầy!!

  84. Khoa said

    Chào Thầy!
    Hiện em đang muốn viết một ứng dụng trên java để chạy file .flv em nhờ thầy chỉ giùm em, em đang rất cần. Cám ơn thầy

  85. luuthe said

    em chào Thầy! em là sinh viên DHSP Đà Nẵng. Em co làm báo cáo về MVC trong swing (java nâng cao). Em tìm tài liệu mà ít có. Thầy có thể vui lòng gửi cho em được không? em cảm ơn Thầy nhiều!

  86. Ha Quang said

    Em xin chào thầy !
    Giả sử em có 1 JTable với các cột là Mã Sách, Tên Sách, Tác giả. Khi em insert vào CSDL các bộ (GT01,Giải Tích,Nguyễn Văn An), (GT02,Giải Tích,Nguyễn Văn An), (GT03,Giải Tích,Nguyễn Văn An).
    Bây giờ với các bộ có cùng Tên Sách, Tác giả và chỉ khác nhau mã sách thì em muốn nhóm các mã sách đó vào 1 JComboBox thì phải làm thế nào ạ?
    Em xin cảm ơn thầy và mọi người.

  87. Võ Văn Hải said

    Ý em có phải là insert combobox vào JTable không? Đây lả ví dụ:

    package as;

    import java.awt.Component;

    import javax.swing.DefaultCellEditor;
    import javax.swing.JComboBox;
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.table.DefaultTableModel;
    import javax.swing.table.TableCellRenderer;
    import javax.swing.table.TableColumn;

    public class ComBoInTable {
    public static void main(String[] args) {
    JTable table = new JTable();
    DefaultTableModel model = (DefaultTableModel)table.getModel();
    // Add some columns
    model.addColumn(“A”, new Object[]{“item1″});
    model.addColumn(“B”, new Object[]{“item2″});

    Object []row2={“item3″, “something”};
    model.addRow(row2);
    // These are the combobox values
    String[] values = new String[]{“item1″, “item2″, “item3″};
    // Set the combobox editor on the 1st visible column
    int vColIndex = 0;
    TableColumn col = table.getColumnModel().getColumn(vColIndex);
    col.setCellEditor(new MyComboBoxEditor(values));
    // If the cell should appear like a combobox in its
    // non-editing state, also set the combobox renderer
    col.setCellRenderer(new MyComboBoxRenderer(values));

    JFrame frm=new JFrame();
    frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frm.setSize(400,400);

    frm.add(new JScrollPane(table));

    frm.setVisible(true);

    }
    }

    class MyComboBoxRenderer extends JComboBox implements TableCellRenderer {
    public MyComboBoxRenderer(String[] items) {
    super(items);
    }
    public Component getTableCellRendererComponent(
    JTable table, Object value, boolean isSelected,
    boolean hasFocus, int row, int column) {
    if (isSelected) {
    setForeground(table.getSelectionForeground());
    super.setBackground(table.getSelectionBackground());
    }
    else {
    setForeground(table.getForeground());
    setBackground(table.getBackground());
    }
    // Select the current value
    setSelectedItem(value);
    return this; }
    }

    class MyComboBoxEditor extends DefaultCellEditor {
    public MyComboBoxEditor(String[] items) {
    super(new JComboBox(items));
    }
    }

  88. trongcuong1710 said

    Gửi thầy hải, trong một lần tình cờ search thông tin thì em thấy được trang web này của thầy, sẵn đang có chỗ ko bik nên mạn phép hỏi thầy, hiện em đang làm project cho công ty và gặp bí ở chỗ export ra file .csv. Em mún export ra file .csv có format dựa trên file template.csv kèm theo sau đây, thầy có thể cho em xin code sample để tham khảo đc ko ạ. Xin cám ơn thầy ạ

    File template.csv: http://www.mediafire.com/file/1oit5t99ym9qn6a/template.csv

  89. Võ Văn Hải said

    Tôi không biết bạn export cái gì ra cvs. Nếu là 1 resultset thì bạn cứ duyệt qua resultset theo kiểu:

    PrintWriter out=new PrintWriter(new FileOutputStream(sFileName));
    ///....
    ResultSet rs=...;
    int cols=rs.getResultSetMetaData().getColumnCount();
    String s="";
    while(rs.next()){
    s="";
    for(int i=0;i<cols;i++){
    s+=rs.getString(i+1)+",";
    }
    out.println(s);
    }
    out.close();

  90. Trần Quốc Hiếu said

    Thầy cho em hỏi cái này ạ! em tìm hoài mà không ra cách làm:
    em đã làm cho bảng của database hiện ra bảng của Java được rồi, nhưng khi thay đổi giá trị của nó thì làm sao để cập nhật được giá trị mới ấy vào trong bảng. Em mới chỉ làm được phần tương tự là cập nhật giá trị từ trong jtextfield vào trong bảng thôi ah`.
    code: hiển thị table của database ra bảng của giao diện trên java từ database.

    try {
    Class.forName(“com.mysql.jdbc.Driver”);
    Connection con = asteriskmanager.Connection.getConnection();
    if (con != null) {
    System.out.println(“Kết nối thành công!”);
    }
    java.sql.Statement stmt = con.createStatement();
    ResultSet rs = stmt.executeQuery(“select * from price”);
    ResultSetMetaData rsmeta =(ResultSetMetaData) rs.getMetaData();
    int num_col = rsmeta.getColumnCount();

    while (rs.next()) {

    Object col[] = new Object[num_col];
    for (int i = 0; i < num_col; i++) {
    col = rs.getObject(i + 1);
    }
    DefaultTableModel df = (DefaultTableModel) Pricetable.getModel();
    df.addRow(col);
    }

    } catch (Exception e) {
    e.printStackTrace();
    }
    ————————————-
    Code cập nhập khi bấm phím Submit:

    private void SubmitbuttonActionPerformed(java.awt.event.ActionEvent evt) {
    try {
    Class.forName("com.mysql.jdbc.Driver");
    Connection con= (Connection) asteriskmanager.Connection.getConnection();
    ResultSet rs = stmt.executeQuery("select * from price");
    if ( con!=null ) {System.out.println("Kết nối thành công (pice)!");}
    java.sql.Statement stmt=con.createStatement();
    while (rs.next()) {
    /* code phần này em muốn là nó sẽ cập nhật giá trị thay đổi trong bảng trên java và sau đó cập nhật lại vào database nhưng em chưa làm được. */
    }

    } catch(Exception e) {
    e.printStackTrace();
    }
    }
    // em đã tạo một lớp có tên là connection để kết nối rồi nên những phần kết nối trên em chỉ là lấy ra xài thôi. Bài tập này em dùng netbean để làm, giao diện em dùng Jframe Form.
    Mong thầy giúp đỡ. em cám ơn thầy nhiều.

  91. Võ Văn Hải said

    Chào bạn!
    JTable không như DatagridView bên C#/VB nên việc code cho nó thao tác với cơ sở dữ liệu khó hơn. Google theo từ khóa [JTable database] thì có rất nhiều người hỏi về vấn đề này và cũng có rất nhiều giải pháp cho nó.
    Nếu như bạn chỉ muốn cập nhật giá trị đã tồn tại trên JTable thì tôi có 1 giải thuật đề nghị như sau:
    1. Duyệt qua từng dòng trên JTable(tất nhiên cột ID của bạn không cho thay đổi)
    2. So sánh các giá trị trên JTable với dữ liệu trong cơ sở dữ liệu coi có thay đổi không.
    2.1. Nếu có thay đổi thì cập nhật theo ID.
    2.2. Nếu không thì bỏ qua
    Chúc thành công!

  92. Khoa said

    Chào thầy. Em là sinh viên cũ của thầy
    Có cách nào nhúng flash vào java application không thầy. Em tìm hoài mà không ra. Mong thầy dành ít thời gian chỉ em. Em đang chờ thầy trả lời.Em cám ơn

  93. Võ Văn Hải said

    Đây là code chèn flash vào JSP page. Bạn đổi link src lại nhé!

    	
    &lt %@page contentType="text/html" pageEncoding="UTF-8"%>
    &lt !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
       "http://www.w3.org/TR/html4/loose.dtd">
    &lt html>
    	&lt head>
    	&lt title>Embed flash file in jsp page.&lt /title>
    	&lt /head>
    	&lt body>
    	&lt p>
    		Embedded flash file in jsp page.
       &lt /p>
    	&lt div style="position: relative; width: 400px; height:400px; overflow:hidden">
    		&lt object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" 
    		  codebase="http://download.macromedia.com/pub/shockwave/cabs
    					/flash/swflash.cab#version=6,0,29,0" 
    		   width="400" height="400">
    		  &lt param name="quality" value="high">
    		  &lt embed src="pic.swf" quality="high" pluginspage=
    		   "http://www.macromedia.com/go/getflashplayer" 
    			 type="application/x-shockwave-flash" width="400" 
    					   height="400">
    		  &lt /embed>
    		&lt /object>
    	&gt /div>
    	&lt /body>
    &lt /html>
    
    
  94. Khoa said

    Còn flash trên awt thì sao thầy.

  95. Luong Nguyen said

    chào thầy Hải!
    thầy có thể giúp em phần quyền trong java RMI được ko ạh.
    em đnag làm đồ án về javaRMI nhưng cái phần quyền cho admin và Smod em ko làm được, mong Thầy giúp em.
    chào thầy!

  96. Luong Nguyen said

    chào thầy! Tôi làm về gửi tin nội bộ bằng RMI, thầy cách nào soạn thảo tin có thể cho ảnh vào và hiển thi tin như word hoặc html ko ạh??
    mong thầy giúp…
    cảm ơn thầy!

  97. Võ Văn Hải said

    Sao bạn lại chọn RMI mà không nghĩ đến WebService? Tôi khuyên bạn nên dùng WS hoặc nếu muốn bạn có thể sử dụng EJB.

  98. Nguyen said

    Chào Thầy, em đang là sinh viên. Em đang làm simulation trên cơ sở dữ liệu của 3 Java classes. Khi simulation, em lấy kết quả qua Cửa sổ Output. Hiện tại, em rất muốn chạy simulation khoảng 15000 lần và muốn dữ liệu sẽ được tự động nhập vào một Table. Nhưng em không làm được, hiện tại em đang sử dụng Netbeans 6.9. Mong Thầy chỉ dẫn dùm em.

  99. Phạm Minh Công said

    em đang làm báo cáo về tính năng Multiple Open Result Set Objects ở jdbc 3.0, nhưng em không hiểu lắm vì sao ở bản jdbc 2.0 lại không dùng nhiều đối tượng resutlsets được, và khi nào thì nên dùng nhiều resultset, thầy có thể cho ví dụ giúp em được không, em chưa hiểu sẽ ưu điểm và nhược điểm thế nào khi dùng nhiều đối tượng resutl set, em có tìm nhiều tài liệu, nhưng thực sự chưa hiểu, mong thầy giúp em, cám ơn thầy

  100. Võ Văn Hải said

    Là như thế này: Giả sử em có 1 store procedure (sp), mà cái sp này liên quan đến nhiều bảng và việc gọi cái sp này trả về nhiều hơn một result set. Ví dụ ta có 1 sp với tên employeeInfo mà nó có thể trả về các resultset sau:

    1. Địa chỉ của nhân viên và các thông tin cá nhân
    2. Danh sách các nhân viên mà nhân viên này giám sát
    3. Một danh sách các dự án mà nhân viên này tham gia

    Với JDBC 2.0, việc thực thi là tuần tự và sinh ra 3 resultset độc lập. Giả sử ứng dụng muốn lấy danh sách các dự án mà nhân viên tham gia trước, có nghĩa là việc thực thi sẽ là lấy cái thứ 1, 2 rồi hủy rồi mới đến cái thứ 3. Như vậy rất là bất tiện. JDBC không cung cấp cơ chế truy xuất đồng thời.
    Với JDBC thì vấn đề này rất đơn giản bởi có cung cấp tính chất đồng thời cho việc truy xuất các resultset như ví dụ trên. Vi dụ:

    // get ready to call the employeeInfo procedure
    CallableStatement cstmt = conn.prepareCall (“{call employeeInfo (?)}”);

    Cstmt.setInt (1,71164);
    // bind parameter info for employee with id 71164

    Boolean RetCode = Cstmt.execute ();
    // call the procedure
    // For simplicity we’ll bypass logic for the procedure possibly returning update counts

    // first result set will be discarded … materialize it and immediately move to the second
    ResultSet DiscardRS = cstmt.getResultSet();
    // materialize first result set

    ResultSet EmpListRS = cstmt.getMoreResults ();
    // by default, close DiscardRS
    // the 2nd result set: list of employees that report to 71164 is now available

    ResultSet ProjectsRS = cstmt.getMoreResults (KEEP_CURRENT_RESULT);
    // the 3rd result set is now materialized and we can simultaneously operate on both
    // the employee list and the project list

  101. Phạm Minh Công said

    cám ơn thầy đã cho em ý kiến về jdbc 3, nhưng em chưa hiểu, ở jdbc 2.0, với 3 bộ kết quả đó, mình muốn lấy bộ kết quả thứ 3 thì làm sao, không lẽ gọi hàm .next(); mãi cho tới khi qua 2 bộ kia ạ, em chưa hiểu lắm, mong thầy giúp

  102. Võ Văn Hải said

    phải bỏ qua 2 resultset đầu chứ không phải .next() là chuyển mẫu tin.

  103. Phạm Minh Công said

    làm sao bỏ qua được hả thầy, em có đọc thấy result có mấy hàm như next(),preview(),first(),last(),…nhưng không chuyển được, thầy có thể mô tả sơ cách nó chuyển không ạ, xin lỗi vì làm phiền thầy nhiều, có lẽ kiến thức của em còn non quá

  104. Võ Văn Hải said

    Trong code trên tôi đã ví dụ rồi, em dung 1 CallableStatement để thực thi 1 sp, xong để lấy rs, ta gọi cs.getResultSet();Để lấy rs tiếp ta gọi cs.getMoreResults();

  105. Phạm Minh Công said

    vậy jdbc 3.0 cũng đâu thể truy cập liền tới bộ kết quả thứ 3, nó vẫn phải đi qua 2 bộ kia, nhưng jdbc 3 có hỗ trợ giữ lại những rs trước đó, em có viết code test thử:

    package test;
    import java.sql.*;
    public class Main {
    public static void main(String[] args) {

    try {
    String sql1 = “select Lastname,FirstName from dbo.Employees;”+”select Title from dbo.Employees”;
    Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver”);
    Connection con = DriverManager.getConnection(“jdbc:sqlserver://localhost;databaseName=Northwind;user=sa;password=123456″);
    Statement stmt = con.createStatement();
    boolean result = stmt.execute(sql1);
    ResultSet rs = stmt.getResultSet();
    if(result)
    {
    while(rs.next())
    {
    System.out.println(“Last Name:”+rs.getString(“LastName”)+” First Name:”+rs.getString(“FirstName”));
    }
    }
    result = stmt.getMoreResults(Statement.KEEP_CURRENT_RESULT);
    if (result)
    {
    ResultSet rs1 = stmt.getResultSet();
    while(rs1.next())
    {
    System.out.println(“Title: “+rs1.getString(“Title”));
    }
    }
    rs.first();
    System.out.println(rs.getString(“LastName”));
    } catch (Exception ex) {
    System.out.print(ex);
    }
    }
    }
    Kết quả em chạy ra là :

    run:
    Last Name:Davolio First Name:Nancy
    Last Name:Fuller First Name:Andrew
    Last Name:Leverling First Name:Janet
    Last Name:Peacock First Name:Margaret
    Last Name:Buchanan First Name:Steven
    Last Name:Suyama First Name:Michael
    Last Name:King First Name:Robert
    Last Name:Callahan First Name:Laura
    Last Name:Dodsworth First Name:Anne
    com.microsoft.sqlserver.jdbc.SQLServerException: This operation is not supported.BUILD SUCCESSFUL (total time: 3 seconds)

    Nó không cho giữ lại cái rs khi em gọi rs1, theo exception thì nó không hỗ trợ cho KEEP_CURRENT_RESULT, khi em để CLOSE_CURRENT_RESULT thì chạy được cái rs1 nhưng cái rs kia bị close, thông tin từ trang http://msdn.microsoft.com/en-us/library/ms378508(v=sql.90).aspx, nói là KEEP_CURRENT_RESULT không hỗ trợ bởi jdbc driver, nhưng tài liệu nào nói về jdbc 3.0 cũng thấy là dùng được KEEP_CURRENT_RESULT,em không hiểu vấn đề này lắm, mong thầy giúp(em tải jdbc driver 3.0 từ microsoft và import vào project của em ở trong thư mục library)

  106. Nguyễn Hoàn said

    em có bài này mong các bác xem cho em và cho em xin đoạn code đc ko ạ

    Lập trình phần mềm chát giữa hai máy tính nối mạng với nhau với yêu cầu sau:
    1. Sử dụng kĩ thuật lập trình hướng đối tượng.
    2. Cho phép người sử dụng nhập vào tên nick.
    3. Hiện thị đan xen nội dung mà hai chương trình trên hai máy gửi cho nhau.
    4. Hỗ trợ các dòng thông điệp bằng tiếng Việt trên bảng mã Unicode.
    5. Cho phép lưu lại nội dung các lần chát.

  107. pthanh said

    Thầy ơi cho em hỏi về các phương thức của ResultSetMetaData.
    e tìm hiểu thì thấy có 21 phương thức nhưng em chưa hiểu rõ lắm chức năng từng phương thức. Vì là bản dịch ra từ tiếng anh nên rất mơ hồ. Thầy giải thích giúp em gấp nha thầy. Em co demo hết rồi nhưng có một số phương thức em không hiểu.

    Đây là các phương thức em chưa hiểu:

    1. GetCatalogName(int column)
    4. GetScale
    5. GetSchemaName
    6. isAutoIncrement
    7. isCaseSentitive
    8. isDefinitelyWritable
    9. isReadOnly
    10. isSeachable
    11. isSigned
    12. NullableUnknown

    Thầy phân biệt dùm em các phương thức này, em demo ra kết quả tương tự:
    1. Phân biệt ResultSet va ResultSetMetaData
    2. Phân biệt GetColumnLabel va GetColumnName
    3. Phân biệt GetColumnDisplaySize va GetColumnPrecision

  108. Võ Văn Hải said

    Em chịu khó đọc tiếng Anh đi. Link của lớp ResultSetMetaData ở đây.
    – ResultSet là 1 đối tượng chứa tập các records và cả cấu trúc dùng để chứa các records này (ResulSetMetaData).
    – ColumnLabel là chỉ cái “caption”. ví như trong msaccess thì ColumnName là tên của field nhưng ColumnLabel là cái hiện ra cho user thấy khi mở bảng.
    – GetColumnDisplaySize chỉ chiều rộng tối đa của cột, và không có phương thức nào có tên GetColumnPrecision cả. Chỉ có getPrecision(int) trả về độ rộng của 1 cột

  109. phuc thanh said

    Em đọc lại hơn chục lần rồi đó thầy.Dịch ra mơ hồ lắm.
    Thầy có thể nói ý nghĩa của các phương thức đó không. Khi nào mình sử dụng nó trong thực tiễn. ví dụ như trong ứng dụng quản lý.

  110. phuonghong said

    Em chào thầy. Thầy cho e hỏi về các phương thức trong ResultSetMetaData ạ!
    E không rõ ý nghĩa việc sử dụng các phương thức isSeachable, isReadOnly, isSigned, NullableUnknown, getScale ví dụ sử dụng trong database QuanLyDuAn, mong thầy giúp e ạ!

  111. phuc thanh said

    khi em chạy demo cho 2 phương thức getDisplaySize va getPrecisiont với bảng sau:
    create table NhanVien
    (
    MaNV char(9) primary key,
    HoNV nchar(15),
    TenLot nchar(15),
    TenNV nchar(15) not null,
    NgaySinh datetime,
    DiaChi nchar(30),
    Phai nchar(3),
    Luong float,
    MaNQL char(9) null,
    Phong int not null
    );
    GO
    Thì ra kết quả thế này:
    Kết quả của getPrecision:
    Cot 1 la 9
    Cot 2 la 15
    Cot 3 la 15
    Cot 4 la 15
    Cot 5 la 23
    Cot 6 la 30
    Cot 7 la 3
    Cot 8 la 15
    Cot 9 la 9
    Cot 10 la 10
    Kết quả của getDisplaySize:
    Cot 1 la 9
    Cot 2 la 15
    Cot 3 la 15
    Cot 4 la 15
    Cot 5 la 23
    Cot 6 la 30
    Cot 7 la 3
    Cot 8 la 22
    Cot 9 la 9
    Cot 10 la 11

  112. pttkieu said

    Emm chào thầy! Thầy cho e hỏi trong Netbeans làm sao hiển thị thông báo lên JtextArea
    ví dụ e có câu thông báo :
    System.out.println(” Kết nối thành công…..”);

    Muốn chuyển project trong Netbeans chỉ cần chạy exe4j là được hả thầy?
    Mong thầy giúp e ạ!

  113. tranduykhiem said

    Anh ơi cho em hỏi cách chèn hình vào JTable, mà dữ liệu của Table được đọc từ bảng NhanVien(Ma,HoTen,NgaySinh,HinhAnh). Nhưng Field HinhAnh là chuỗi, chứa tên hình .
    Em muốn hiển thị nó lên Table thì làm sao ạ!

  114. Võ Văn Hải said

    Chịu khó tìm trong blog trước khi hỏi nhé bạn. link đây: http://vovanhai.wordpress.com/java/l%E1%BA%ADp-trinh-java-nang-cao/jdbc-java-database-connectivity/d%E1%BB%8Dc-hinh-t%E1%BB%AB-ms-sql-server-r%E1%BB%93i-hi%E1%BB%83n-th%E1%BB%8B-len-jtable/

  115. Naruto said

    thầy ơi cho e hỏi về giao diện của deposit, withdraw, và transfer giống và khác nhau ở điểm nào ạ! nếu có xin thầy nói cho e biết! cám ơn thầy nhiều !

  116. Võ Văn Hải said

    Các thao tác của nghiệp vụ ngân hàng theo đúng như chức năng của nó mà em làm giao diện. Em xài thẻ ATM thế nào?

  117. sk9a1r said

    thầy ơi.trường em bắt nghiên cứu java bean mà không có giáo viên hướng dẫn.Hiện tại em đang làm đề án viết game Trúc Xanh bằng javabean.Nhưng mà em tìm trên mạng thì chỉ có JavaBean kết hợp với web thôi.Thầy chỉ hướng phân tích giúp em với.Em cần phải tách lớp bean ra để gì trong.Với lại em đang lập trình giao diện cho chương trình.Đến lúc tạo 1 mảng button ,làm cách nào để chèn hình vào button vậy thầy.Cám ơn thầy !!!!

  118. Võ Văn Hải said

    Java bean không chỉ làm với web đâu bạn. bạn xem lại nhé. Còn đưa hình vào button thì bạn làm như sau:
    yourbutton.setIcon(new ImageIcon(“đường dẫn đến file GIF/PNG”));

  119. sk9a1r said

    Thầy ơi JavaBean mà dùng cho Application thì tiếng anh gọi nó là gì vậy thầy .Với lại em muốn hỏi thêm.MÌnh tạo 1 mảng button xong đưa các hình random vào đó thì làm sao thầy.Với lại cách đánh dấu các hình chỉ được hiện ra 2 lân thôi thì làm sao thầy

  120. NgoToi said

    Bạn nào dùng Netbeans 7.0 chưa nhỉ ? Mình mới down Netbeans 7.0 về, nó tự động cài đặt luôn, mà mình thắc mắc ko biết đây là bản dùng thử ko nữa, nếu là bản dùng thử thì sau 1 thời gian là nó lại bắt nhập key, mình đoán thế. Vậy bạn nào đã dùng qua rồi thì tư vấn cho mình biết nhé, nếu là bản dùng thử, thì bạn nó có key cho mình xin luôn nhé. Thanks các bạn nhiều.

  121. Võ Văn Hải said

    Đầy là IDE miễn phí. Bạn an tâm không có key hay thứ gì khác.

  122. NgoToi said

    Thầy ơi cho em hỏi. Cái JSP và Servlet là nó thuộc Java nâng cao hay là nó thuộc J2EE, em thấy nhiều người nói là thuộc J2EE mà tại sao trong cái mục thầy để Java nâng cao thì có 2 cái đó, còn trong J2EE lại ko có ?
    JSP và Servlet là mình nên học JSP trước đúng ko thầy ?
    Nghe nói học JSP là bắt buộc cài JRun, Vậy JRun nó có tác dụng gì cho JSP ?
    Nếu học JSP thì bắt buộc có JRun, thì Thầy hoặc bạn nào có JRun 4.0 + key thì send cho mình luôn nhé.
    Thanks Thầy và các bạn nhiều.

  123. Võ Văn Hải said

    Em đặt câu hỏi tôi potay.com.
    Servlet/JSP là 1 công nghệ thuộc JavaEE specifications. Còn khi tôi post bài cho sinh viên tôi thì phần này nằm trong môn Advaced Java nên tôi để đấy.

    Học Servlet trước em à. JSP là Servlet+HTML. Khi JSP được thực thi trên 1 WebServer thì nó được build thành servlet trước khi gửi cho client.
    JRun là 1 webserver. Ai bắt buộc hải dùng nó. Ngày nay người ta dùng Tomcat nhiều hơn. Tomcat (http://tomcat.apache.org/) miễn phí, nhẹ,…
    Bạn sẽ phải nghiên cứu nhiều hơn!

  124. NgoToi said

    Thanks thầy nhiều, e hiểu rồi.

  125. Nguyễn Thị Vân said

    Em chào thầy.Thầy có thể cho em hỏi là cách làm report ấy ạ.em làm 1 cái quản lý nhân sự.giờ em làm báo cáo.em dùng i-net Designer để làm thành 1 file html.giờ làm sao để gọi file html đó chạy trong java hả thầy.

  126. [Ai9r]-Knight said

    Thầy ơi giúp em phân biệt giữa JDBC với ODBC với .Em đọc sách thấy JDBC phải xài driver riêng của từng hãng.Nhưng nếu Window mà muốn xài ODBC MySql thì cũng phải cài thêm ODBC của MySql vào,em đọc thêm thì cũng thấy có JDBC cho MySql vậy điểm khác nhau giữa hai cái này là gì vậy thầy.Ích lợi sử dụng của nó ra sao với lại trong trường hợp nào mình nên xài loại nào phù hợp.Cám ơn thầy

  127. Võ Văn Hải said

    ODBC là công nghệ của microsoft nhằm tạo thuận lời cho lập trình viên làm việc với nhiều hệ quản trị cơ sở dữ liệu. LTV chỉ cần làm với ODBC, phần việc còn lại ODBC sẽ làm việc với cơ sở dữ liệu tương ứng. JDBC là 1 công nghệ cho phép java kết nối với các hệ quản trị cơ sở dữ liệu. Mỗi DBMS cần phải có 1 driver riêng. Tuy nhiên ta có thể dùng JDBC thông qua ODBC để kết nối đến cơ sở dữ liệu. Cách này gọi là driver loại 1, loại này chậm. Loại 4 là loại nhanh nhất (có driver riêng cho từng DBMS).

  128. khanhtrung said

    thay oi cho e theo lam de tu cua thay dc khong thay e rat la muon hoc hoi

  129. drquang said

    Cho em hỏi về bài 2 thread đồng bộ nhau, đề bài như sau:

    Create three dasses: Storage, Counter and Printer. The Storage class should store an
    integer. The Counter class should create a thread that starts counting from 0 (0, 1, 2.
    3 …) and stores each value in the Storage class. The Printer class should create thread that keeps
    reading the value in the Storage class and printing it.
    Create a program that creates an instance of the Storage class, and sets up a Counter and a Printer
    object to operate on it.

    e viết 4 class như sau :

    package bai12;
    public class Storage {
    int value;
    boolean busy = false;

    synchronized int get() {
    if(!busy)
    try {
    wait();
    } catch (InterruptedException e) {
    System.out.println(“get() interupted.\n” + e.toString());
    }

    //System.out.println(“get : ” + value);
    notify(); // thong bao da xong, tra lai doi tuong dang monitor
    return value;
    }

    synchronized void put(int value) {
    if(busy)
    try {
    wait();
    } catch (InterruptedException e) {
    System.out.println(“put() interupted.\n” + e.toString());
    }

    this.value = value;
    busy = true;
    //System.out.println(“set : ” + value);
    notify();
    }
    }

    package bai12;
    public class Counter implements Runnable {
    int count = 10;
    Storage storage;

    public Counter(Storage storage) {
    this.storage = storage;
    new Thread(this, “Counter”).start();
    }

    public void run() {
    for (int i = 0; i < count; i++) {
    // try {
    this.storage.put(i);
    System.out.println(Thread.currentThread().getName()
    + " put " + i + " to Storage");

    // Thread.currentThread().sleep (1000);
    // } catch (InterruptedException e) {
    // System.out.println ("Thread interrupted");
    // }
    }
    System.out.println("counter done.");
    }
    }

    package bai12;
    public class Printer extends Thread {
    int count = 10;
    Storage storage;

    public Printer(Storage storage) {
    this.storage = storage;
    new Thread(this, "Printer").start();
    }

    public void run() {
    for (int i = 0; i < count; i++) {
    // try {
    System.out.println(Thread.currentThread().getName()
    + " get " + storage.get() + " from Storage");

    // Thread.currentThread().sleep (1000);
    // } catch (InterruptedException e) {
    // System.out.println ("Thread interrupted");
    // }
    System.out.println("————————-");
    }
    System.out.println("printer done.");
    }
    }

    package bai12;
    public class test {

    public static void main(String[] args) {
    Storage s = new Storage();
    new Counter(s);
    new Printer(s);
    }
    }

    Yêu cầu của bài toán như sau:
    + class Counter lưu tuần tự 10 số int từ 0-9 vào vào class Storage
    (class Storage chỉ lưu 1 lần được 1 giá trị)
    + sau khi class Counter lưu xong 1 số int vào class Storage,
    thì thông báo cho class Printer lấy giá trị này từ class Storage và in ra,
    class Printer in xong thì lại báo cho class Counter lưu giá trị kế tiếp
    Tóm lại đây là 1 quá trình tuần tự có lặp lại

    Em bị lỗi như sau:

    1. có lúc class Counter lưu 2 giá trị xuống class Storage hay Printer đọc 1 giá trị 2 lần,
    thay vì lưu 1 giá trị vào chờ cho Printer đọc xong, mới lưu tiếp ?

    Counter put 0 to Storage
    Printer get 0 from Storage
    ————————-
    Printer get 0 from Storage
    ————————-
    Printer get 0 from Storage
    ————————-
    Printer get 0 from Storage
    ————————-
    Printer get 0 from Storage
    ————————-
    Printer get 0 from Storage
    ————————-
    Printer get 0 from Storage
    ————————-
    Printer get 0 from Storage
    ————————-
    Printer get 0 from Storage
    ————————-
    Printer get 0 from Storage
    ————————-
    printer done.
    Counter put 1 to Storage

    2. có lúc Counter không lưu đủ 10 giá trị từ 0-9 xuống Storage, kết quả là Printer cứ chờ Counter lưu gt mới nên chương trình bị đứng luôn ?

    Counter put 0 to Storage
    Printer get 0 from Storage
    ————————-
    Counter put 1 to Storage
    Printer get 0 from Storage
    ————————-
    Counter put 2 to Storage
    Printer get 1 from Storage
    ————————-
    Printer get 2 from Storage
    ————————-
    Printer get 2 from Storage
    ————————-
    Printer get 2 from Storage
    ————————-
    Printer get 2 from Storage
    ————————-
    Printer get 2 from Storage
    ————————-
    Printer get 2 from Storage
    ————————-
    Printer get 2 from Storage
    ————————-
    printer done.
    Counter put 3 to Storage

    Em dùng tool eclipse.

  130. Võ Văn Hải said

    khó trả lời. Mình rất bận nên cũng rất khó để có nhiều thời gian. Nhưng bạn có thể hỏi và mình trả lời cũng được mà.

  131. Minh Hai said

    Chào thầy!
    Thầy có thể hướng dẫn em viết 1 ứng dụng sử dụng swing và databinding là như thế nào không vậy thầy.
    cám ơn thầy nhiều.

  132. drquang said

    e muốn hỏi là tại sao code trên làm việc không ổn định ???

    e muốn là thread Counter lưu 1 số vào Storage xong rùi thì thread Printer mới lấy giá trị trong Storage rồi in ra.

    Nhưng e lại thấy đôi khi Printer không chờ cho Counter lưu giá trị mà lại in giá trị trước đó (in 2 lần giống nhau) ???

  133. bui van hoang said

    Em thầy.Thầy ơi sao em kết nối CSDL tới hai bảng cùng một ResultSet mà nó báo lỗi thầy ơi.
    thầy giúp em với
    em viết kết nối như sau:
    String url = “jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=DuLieu\\QLHangHoa.mdb”;
    con=DriverManager.getConnection(url,””,””);
    stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
    rs = stmt.executeQuery(“SELECT * FROM TblDanhMucHang,TblLoaiHang”);

  134. Võ Văn Hải said

    Em có điều kiện gì (join) nối 2 bảng chứ không là lỗi. Còn em vẫn muốn lấy 2 bảng, em nên dùng 2 resultset.

  135. MIT said

    Thày ơi cho em hỏi nha !
    Mỗi khi em cài đặt game trên điện thoại di động đều không được, nó hiện ra 2 file là file.jad và file.jar.
    Có phải là điện thoại của em chưa cài java phải không thầy ???
    Nếu muôn cài thì phải làm thế nào ạ ? Cài có dễ không thầy ?

  136. MIT said

    Ý quên !!!
    Em xin cám ơn thày nha !!!

  137. mai said

    em đang sừ dụng JDateChooser, em ko thể lấy ngày mà chọn từ JdateChooser được.Anh có thể hướng dẫn em được ko ạ?

  138. Võ Văn Hải said

    Coi thử dtdd của em có hỗ trợ java không. Dem ra tiệm người ta cài cho.

  139. lala said

    em chào thầy !
    em có một lỗi nhưng không biết sửa thế nào.doạn code của em bị lỗi ở
    public class NewJFrame extends javax.swing.JFrame
    trong khi cho đoạn code đó chạy trên máy khác thì ko sao .
    thầy giúp em với a.

  140. BaoIT said

    Xin thầy hướng dẫn em cách kết nối 1 chương trình java với máy quét mã vạch.
    Nếu thầy bận quá thì chỉ cần nhận sự kiện Và xuất ra chuổi String máy trả về là được.
    Vì đề tài em chỉ yêu cầu như thế.
    Nhưng em hy vọng có hướng để nghiên cứu sâu hơn làm tư liệu đi làm.
    Xin thầy giúp em.
    Em cám ơn thầy.

  141. tranhuudat said

    thầy ơi? cho em hỏi muốn lưu trữ dữ liệu trong access thi dùng câu lệnh gi trong java .thay vì mình lưu trong sql. khi mình click vào button Insert,Update,Delete thi trong access thay đổi theo.

  142. Thưa thầy cho em hỏi là mình không thể hiện thị tiếng việt từ Database Access 2003 lê Java phải không thầy? Vậy dùng Access 2007 – 2010 có được không thầy. Máy em cài Visual Studio 2010 xong là không thề cài được SQL Server 2005 hoặc 2008 nữa. Cài vào thì mở SQL Server lên lại không thấy server nào đề kết nối. Nên Eclipse không dùng được SQL Server nên em đành dùng Access. Em thì không thể cài lại máy vì mất rất nhiều thời gian. Mong thầy còn cách nào khác giúp em? MySQL thì em không sử dụng rành nên không dám đưa vào sử dụng.

  143. Võ Văn Hải said

    Câu lệnh như nhau. Chỉ khác chuỗi kết nối.

  144. Tùng said

    chào thầy. em đang làm một JPA project về quản lý bến xe trong java, nhưng em không biết tạo những báo cáo và thống kê trong JPA project như thế nào, mong thầy chỉ em được không ạh, nếu được xin thầy vui lòng gửi vào email của em: tung_nguyen_83@yahoo.com
    cảm ơn thầy

  145. NGuyễn Hùng Huyền said

    Hi Thầy Hải!
    Thầy cho em hỏi về cách làm game trong java, cụ thể là như sau: em viết lại game Heart (của Microsoft) như hỗ trợ 4 người chơi quan Mạng Lan.Em hỏi Thầy các mình truyền nhận giữa các client với nhau như thế nào, Thầy có thể demo hay cho e 1 đoạn code hỗ trợ về cơ chế truyền giữa các quân Bài đó như thế nào ko ạh.Em cảm ơn Thầy mong đc sự chỉ dẫn cụ thể từ Thầy, em xin cảm ơn Thầy! Chúc Thầy vui và nhiều suc khỏe

  146. Lê Văn Thiện said

    Chào Thầy,
    Thưa thầy cho em hỏi : Trang web được viết bằng form JDK, phải đăng nhập mới vào được trang này (em đã có user và pass). Bây giờ em muốn lấy nội dung của trang này tự động, ví dụ như 10 phút/lần và đưa vào database của em thì phải làm sao ạ ? Em chỉ biết về ASP.NET, còn cái này em chưa biết gì hết. Mong thầy giúp em. Rất cảm ơn thẩy nhiều.
    Thầy trả lời trên đây hoặc mail của em là : lv.thien@yahoo.com. Mong tin thầy nhiều.

  147. VietHung said

    Dear,thầy Hải
    Thanks thầy nhiều,nhờ blog của Thầy,em tiến bộ rất nhiều.
    Em cần viết chương trình nhập dữ liệu file là cấu trúc của các enzym từ database: http://www.ebi.ac.uk/thornton-srv/databases/CSA/.Dữ liệu là những file,mỗi file có code riêng của nó(chẳng hạn: 1pgs1),em phải bắt đầu học từ đâu,cụ thể trên blog của thầy là ở phần nào.Nhờ thầy chỉ điểm,nếu không phiền thầy cho em xin một vài code làm mẫu.
    Chúc Thầy vui,khỏe.

  148. Lê Văn Thiện said

    Xin chào anh Hải,
    Vui lòng cho em hỏi làm thế nào để lấy thông tin trên một applet của java đang chạy phía client ? Ví dụ như lấy nội dung của trang applet đó và chuyển vào database của mình ?
    Cảm ơn anh nhiều (bữa trước em đã hỏi nhưng chưa thấy anh trả lời)

  149. Võ Văn Hải said

    Thì applet khi chạy phải gửi dữ liệu lên thì mình lấy được bình thường chứ nó không gửi lên thì sao mà lấy.
    Sorry bạn. dạo này mình chuẩn bị bảo vệ luận văn TS nên bận lắm.

  150. Võ Văn Hải said

    Cái này thì theo từng cấu trúc mà học thôi. Hay nhất là chuyển dạng biểu diễn thành XML(thiên hạ đã dùng lâu rồi, nó có tên là CML) rồi đọc nó dùng DOM. Bạn xem thêm ở phần dùng DOM để hiểu hoặc tìm 1 API mà lập trình, cái này có rất nhiều trên mạng.

  151. Võ Văn Hải said

    10 phút 1 lần thì đơn giản nhất là dùng cái Timer, cho cái thuộc tính interval của nó =10*60*60*1000. trong sự kiện tick viết code lấy dữ liệu và cập nhật vào cơ sở dữ liệu.

  152. Võ Văn Hải said

    Bạn có thể dùng Socket để truyền dữ liệu hoặc dùng RMI để truyền. Tạo đối tượng quân bài rồi 1 tập các quân bài và truyền.

  153. Võ Văn Hải said

    Dùng iReport hoặc BIRT để làm báo cáo sau đó gọi nó trên ứng dụng của em.

  154. Ân said

    Thưa thầy, em đang viết 1 ứng dụng xoay ảnh 90 độ, 180 độ và 270 độ, thầy có thể cho em demo về ứng dụng này được ko ạ
    cảm ơn thầy nhiều

  155. Võ Văn Hải said

    Hồi trước tôi thấy đâu đó trên internet mà quên mất cái link gốc, chỉ còn đoạn code này. Bạn xem nhé! Link download

  156. Nguyen~Thi~Hue said

    Em chào Thầy!
    Thầy ơi,em là sinh viên trường ngoài. Em mới học môn java nên em không hiểu rõ em mong thầy có thể chỉ cho em được không ah?
    1. Cấu hình kết nối CSDL ra file XML {Sinh viên tự tổ chức cấu trúc file}
    2. Các câu truy vấn SQL ra file Text {File text sinh viên tự tổ chức cấu trúc}
    3. Các Store Procedure ra file .properties {Có thể google java readfile properties để hiểu
    thêm về yêu cầu 3}
    4. Customize Model cho JTable
    Thầy ơi,Thầy có thể cho em ví dụ hay demo em tham khảo có được không ah?
    Email của em: nthuekhtn251288@gmail.com
    Em cám ơn Thầy nhiều!
    Chúc Thầy vui!

  157. Võ Văn Hải said

    1. cấu trúc xml có thể gợi ý như sau:

    <connections>
    	<connection name="your name">
    		<connection-url>jdbc:sqlserver://localhost:1433;databaseName=JSFDemo</connection-url>
    		<driver-class>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver-class>
    		<user-name>sa</user-name>
    		<password>your password</password>
    	</connection>
    	<!--other connections-->
    </connections>
    

    cac yêu cầu còn lại khá dễ.

  158. Nguyen~Thi~Hue said

    Em cám ơn Thầy nhiều!
    Chúc Thầy sức khỏe!

  159. Thầy ơi!E muốn mã hóa pass word để lưu xuống csdl thì phải làm như thế nào thầy?

  160. khongnguyen said

    việc load dữ liệu từ jtable vào csdl sql server em đã làm được,còn việc nhập dữ liệu từ jtable rồi đưa dữ liệu vừa nhập vào csdl(giả sử em có 2 cột mssv,diem).nhờ thầy chỉ giúp,em mò nhiều rồi mà chưa ra

  161. TUẤN ANH said

    Em chào thầy!
    Em đang tìm hiểu về Spring 3 và MyBatics . Thầy có tài liệu tiếng việt phần này không ạ
    Nếu có thầy cho em xin tài liệu liên quan! thầy send giúp em qua gmail này.
    gmail của em là: anhhus@gmail.com

  162. khongnguyen said

    /*
    * To change this template, choose Tools | Templates
    * and open the template in the editor.
    */

    /*
    * nhapdiem2.java
    *
    * Created on Aug 19, 2011, 12:00:06 PM
    */
    package thuthoi;

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.logging.Level;
    import java.util.logging.Logger;

    /**
    *
    * @author zxc123
    */
    public class nhapdiem2 extends javax.swing.JDialog {

    /** Creates new form nhapdiem2 */
    Connection con;
    Statement st;
    public nhapdiem2(java.awt.Frame parent, boolean modal) {
    super(parent, modal);
    initComponents();
    try{
    Class.forName(“sun.jbdc.odbc.JdbcOdbcDriver”);
    con=DriverManager.getConnection(“jdbc:odbc:QLD”,”sa”,”123456″);
    st=con.createStatement();
    } catch (SQLException ex) {
    Logger.getLogger(nhapdiem2.class.getName()).log(Level.SEVERE, null, ex);
    }catch(ClassNotFoundException e){
    e.printStackTrace();

    }
    }

    /** This method is called from within the constructor to
    * initialize the form.
    * WARNING: Do NOT modify this code. The content of this method is
    * always regenerated by the Form Editor.
    */
    @SuppressWarnings(“unchecked”)
    //
    private void initComponents() {

    jScrollPane1 = new javax.swing.JScrollPane();
    jtb_bangdiem = new javax.swing.JTable();
    jbt_ok = new javax.swing.JButton();

    setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

    jtb_bangdiem.setModel(new javax.swing.table.DefaultTableModel(
    new Object [][] {
    {null, null},
    {null, null},
    {null, null},
    {null, null},
    {null, null},
    {null, null},
    {null, null},
    {null, null},
    {null, null},
    {null, null},
    {null, null},
    {null, null},
    {null, null},
    {null, null},
    {null, null},
    {null, null},
    {null, null},
    {null, null},
    {null, null},
    {null, null},
    {null, null},
    {null, null},
    {null, null},
    {null, null},
    {null, null},
    {null, null},
    {null, null},
    {null, null},
    {null, null},
    {null, null},
    {null, null},
    {null, null},
    {null, null},
    {null, null},
    {null, null},
    {null, null},
    {null, null},
    {null, null},
    {null, null},
    {null, null},
    {null, null},
    {null, null},
    {null, null},
    {null, null},
    {null, null},
    {null, null},
    {null, null},
    {null, null},
    {null, null},
    {null, null}
    },
    new String [] {
    “mssv”, “nhập điểm”
    }
    ) {
    Class[] types = new Class [] {
    java.lang.String.class, java.lang.String.class
    };

    public Class getColumnClass(int columnIndex) {
    return types [columnIndex];
    }
    });
    jScrollPane1.setViewportView(jtb_bangdiem);

    jbt_ok.setText(“ok”);
    jbt_ok.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent evt) {
    jbt_okActionPerformed(evt);
    }
    });

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(layout.createSequentialGroup()
    .addContainerGap(15, Short.MAX_VALUE)
    .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 436, javax.swing.GroupLayout.PREFERRED_SIZE)
    .addContainerGap())
    .addGroup(layout.createSequentialGroup()
    .addGap(173, 173, 173)
    .addComponent(jbt_ok, javax.swing.GroupLayout.PREFERRED_SIZE, 105, javax.swing.GroupLayout.PREFERRED_SIZE)
    .addContainerGap(183, Short.MAX_VALUE))
    );
    layout.setVerticalGroup(
    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(layout.createSequentialGroup()
    .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 281, javax.swing.GroupLayout.PREFERRED_SIZE)
    .addGap(18, 18, 18)
    .addComponent(jbt_ok)
    .addContainerGap(29, Short.MAX_VALUE))
    );

    pack();
    }//

    private void jbt_okActionPerformed(java.awt.event.ActionEvent evt) {
    // TODO add your handling code here:
    int sodong= jtb_bangdiem.getRowCount();
    String mssv;
    String diem;
    //int s=0;
    int dem=0;
    while(dem<=sodong)
    try {
    mssv=(String) jtb_bangdiem.getValueAt(dem++,1);
    diem=(String) jtb_bangdiem.getValueAt(dem++,2);
    int s=st.executeUpdate("insert into bangdiem values ('"+mssv+"','"+diem+"')");
    } catch (SQLException ex) {
    Logger.getLogger(nhapdiem2.class.getName()).log(Level.SEVERE, null, ex);
    }

    }

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
    /* Set the Nimbus look and feel */
    //
    /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
    * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
    */
    try {
    for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
    if (“Nimbus”.equals(info.getName())) {
    javax.swing.UIManager.setLookAndFeel(info.getClassName());
    break;
    }
    }
    } catch (ClassNotFoundException ex) {
    java.util.logging.Logger.getLogger(nhapdiem2.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (InstantiationException ex) {
    java.util.logging.Logger.getLogger(nhapdiem2.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
    java.util.logging.Logger.getLogger(nhapdiem2.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (javax.swing.UnsupportedLookAndFeelException ex) {
    java.util.logging.Logger.getLogger(nhapdiem2.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    }
    //

    /* Create and display the dialog */
    java.awt.EventQueue.invokeLater(new Runnable() {

    public void run() {
    nhapdiem2 dialog = new nhapdiem2(new javax.swing.JFrame(), true);
    dialog.addWindowListener(new java.awt.event.WindowAdapter() {

    @Override
    public void windowClosing(java.awt.event.WindowEvent e) {
    System.exit(0);
    }
    });
    dialog.setVisible(true);
    }
    });
    }
    // Variables declaration – do not modify
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JButton jbt_ok;
    private javax.swing.JTable jtb_bangdiem;
    // End of variables declaration
    }
    em viết thế này mà vẫn không đưa dữ liệu vào csdl được,nhờ thầy sữa giúp

  163. khongnguyen said

    em có csdl có 2 cột mssv và diem

  164. VietHung said

    Nhờ Thầy chỉ cho em code để download file từ link : http://www.ebi.ac.uk/thornton-srv/databases/CSA/ vào thư mục C://java/bin của máy tính.
    Mong thầy help em sớm,em post câu hỏi nhiều lần,chờ câu hỏi Thầy lâu rồi. Cám ơn Thầy

  165. Võ Văn Hải said

    Code sau download 1 file từ 1 URL về máy

    package test;
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.net.URL;
    public class FileDownloader{
    	/**
    	 * Download file từ 1 url nào đó
    	 * @param downloadURL là url của file cần download
    	 * @param savingPath là đường dẫn và tên file cần lưu
    	 * @throws IOException
    	 */
    	public void download(String downloadURL,String savingPath) throws IOException{
    		BufferedInputStream in = new BufferedInputStream(new     
    				URL(downloadURL).openStream());
    		FileOutputStream fos = new FileOutputStream(savingPath);
    		java.io.BufferedOutputStream bout = new BufferedOutputStream(fos,1024);
    		byte[] data = new byte[1024];
    		int x=0;
    		while((x=in.read(data,0,1024))>=0){
    			bout.write(data,0,x);
    		}
    		bout.close();
    		in.close();
    	}
    	public static void main(String[] args) throws Exception{
    		FileDownloader d=new FileDownloader();
    		d.download("http://www.ebi.ac.uk/thornton-srv/databases/cgi-bin/CSA/CSA_Download.pl",
    				"C:/CSA_Download.pl");
    		System.out.println("OK");
    	}
    }
    
  166. Võ Văn Hải said

    sorry. thầy không có tài liệu tiếng Việt về phần này

  167. Võ Văn Hải said

    Em xem bài trong blog có làm đến việc này.

  168. TUẤN ANH said

    Thầy ơi!Cho em hỏi
    Làm thế nào để con trỏ chuột focus đến ô nhập liệu đầu tiên và nếu nhập sai thì con trỏ chuột cũng phải focus đến ô bị sai.?
    Giống như khi đăng nhập trang me.zing.vn y !

  169. VietHung said

    Thưa thầy: em dùng absolute URL như sau:
    d.download(“http://www.pdb.org/pdb/explore/explore.do?structureId=1YVS”,”C:/Java/bin/1yvs.pdb”);
    kết quả: output file là một trang văn bản XML của web đó,chứ không phải file 1YVS.pdb nằm ở cái link download bên phải .
    Nhờ thầy help

  170. Võ Văn Hải said

    tfYourName.requestFocus();

  171. VietHung said

    Sau khi em run code của thầy, kết quả không down được file mà down được trang html page ,chứa cái file đó.Em phải sữa code lại thế nào để ,để tương tác với cái trang web ,down được cái file đó :
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.net.URL;

    public class FileDownloader{

    public void download(String downloadURL,String savingPath) throws IOException{
    BufferedInputStream in = new BufferedInputStream(new
    URL(downloadURL).openStream());
    FileOutputStream fos = new FileOutputStream(savingPath);
    java.io.BufferedOutputStream bout = new BufferedOutputStream(fos,1024);
    byte[] data = new byte[1024];
    int x=0;
    while((x=in.read(data,0,1024))>=0){
    bout.write(data,0,x);
    }
    bout.close();
    in.close();
    }
    public static void main(String[] args) throws Exception{
    FileDownloader d=new FileDownloader();
    d.download
    (“http://www.pdb.org/pdb/explore/explore.do?structureId=1YVS”,”output_file.pdb”);
    System.out.println(“OK”);
    }
    }

  172. VietHung said

    Thay oi,em tim ra loi giai roi:cai link do la cua trang web chu khong phai cua file can download
    em phai click chuot phai vao cai file cua em => copy shortcut=>paste shotcut do vao DownloadUrl => run code binh thuong.Em post len de cac ban khac tham khao

  173. partynol said

    Chào thầy .
    Em là sv trường Khoa Học Tự Nhiên. Hiện e đang học lớp Hoàn Chỉnh ĐH.
    Hồi học CĐ e chưa đc học môn Java. Giờ môn Mạng Máy Tính yêu cầu em làm 1 đồ án là ứng dụng socket programing trong Java để viết 1 chương trình chia sẻ file ứng dụng cả 2 mô hình: Client-Server và P2P (gần giống chương trình Bittorent).
    Em đã google tìm hiểu nửa tháng nay (chủ yếu là đọc trong blog của thầy :) ) nhưng cũng dừng ở mức là tạo ra được 1 Client kết nối tới Server và dùng FTP Protocol download 1file từ server về.
    Hiện em đang “bí” về phần coding để thiết kế ra 1 “Bittorent Protocol” (e gọi theo Wikipedia).
    Mong thầy chỉ giúp e 1 hướng đi để giải quyết vấn đề này.
    Nếu có tài liệu tham khảo xin thầy send wa địa chỉ mail: partynol@yahoo.com.
    Mong được hồi âm của thầy.
    Em xin cảm ơn thầy trước.
    Chúc sức khỏe thầy và mọi người trong VoVanHai’s blog.

  174. thủy said

    viết như thế này thì phải làm thế nào ạ?
    roll no (textfield)
    name (textfield)…
    nói chung là các label thẳng hàng như thế ạ?
    em mới học cái này mà không biết viết như thế nào cho thẳng hàng như thế được à, mong thầy chỉ dạy ạ!

  175. Nikelvin said

    Em chao thay! Em co 1 Jtable thuc hien viec tinh toan luong cho nhan vien. Gia su em dang co 1 gia tri ben trong 1 cell. Bay gio, em muon sua gia tri do. Em muon khi tab (hoac Enter) den cell do va nhap gia tri moi thi gia tri moi se chen ngay len gia tri cu (tuc la Khong phai nhan dup con chuot vao cell do va xoa gia tri cu di moi nhap duoc gia tri moi), giong nhu trong Excel do ah! Em phai lam the nao ah! Em cam on thay.

  176. change0810 said

    Em cũng đang làm bài tập lớn về vấn đề chia sẻ file theo kiểu lai giữa client-server và Peer-to-peer. Thầy có tài liệu xin gửi cho em với ạ.
    buithean2010@yahoo.com
    chúc sức khỏe thầy !

  177. Võ Văn Hải said

    Khi ô đang có focus, em nhấn phím F2 để sửa.

  178. Nikelvin said

    Em chao thay! Y em la khi o dang co focus, em muon nhap ngay mot gia tri khac vao cell thi gia tri nay phai de len gia tri cu(gia tri cu trong Cell mat di, giong nhu trong Excel) chu khong can phai dua chuot vao trong Cell do thi moi sua duoc ah! Em phai lam the nao ah? Em cam on thay!

  179. hau said

    e muon hoi thay ti nay dc ko thay?e dag lam java nang cao ve May ATM,thay co the huong dan code nap tien vao may va truy van phuong an rut tien dcko thay.Cam on thay nhieu

  180. Togo said

    Em chào thầy! Thầy cho em hỏi về lập trình socket là khi ta lập trình client/server thì server sẽ tạo ra một socket để lắng nghe và 1 socket để xử lý khi có yêu cầu từ client. Còn client muốn kết nối với server thì thông qua port và địa chỉ ip vậy nếu em muốn tạo kết nối giữa client và client thì tạo socket như thế nào vậy thầy.

  181. [...] Môn Java  http://vovanhai.wordpress.com/java/l%E1%BA%ADp-trinh-java-nang-cao/ [...]

  182. Xin chào!
    Có ai có đoạn code java để lấy giá trị “thứ, ngày, tháng, năm” từ server để hiển thị trên web không??
    Cũng xin hỏi thầy Hải luôn??
    Nếu thấy có có thể chia sẻ cho em với.

  183. Mong các bạn và thầy phản hồi sớm!
    Thank!

  184. VietHung said

    Nhờ thầy giúp em design hash function để hash vị trí (x,y,z) thành index , với 2D em hash vi trí (x,y) như sau :
    i= (int) (ceil(x/w));// w là độ rộng của bin có thể từ 1 đến 3;
    j= (int) (ceil(y/w));
    hash function : H(x,y)=|i*378551+j*63689|;
    còn với (x,y,z) em không biết làm,nhờ thầy giúp

  185. Võ Văn Hải said

    không hiểu bạn hỏi như thế nào ở đây. Server là web server hay time server?
    Nếu trong web server thì bạn new Date() là bạn lấy được ngày tháng năm hiện tại rồi.

  186. Muốn lấy giá trị ngày tháng năm của server (time server), lấy các giá trị đó hiển thị trên 1 web server.
    Thnk thầy.

  187. Nguyễn Văn Đức said

    Thưa thầy. Về phần giao diện trong java. Bây giờ em có 1 ô textfield thì khi thay đổi giá trị phía trong thì khi muốn nhận giá trị mới đó ta phải ấn Enter. Em muốn hỏi thầy là có cách nào khác chỉ cần điền giá trị vào ô là chương trình nhận giá trị mới luôn, ko cần ấn Enter ko ạ.

    ps: Em nói khó hiểu quá. Mong thầy thông cảm.

  188. Hoàng Ngọc Thanh said

    thầy cho em hỏi làm sao ma viết được tiếng việt ở trong java vậy thầy
    em dùng editplus
    thanks thầy

  189. minhneo said

    import java.rmi.Remote;
    import java.rmi.registry.LocateRegistry;
    import java.rmi.registry.Registry;
    import java.rmi.server.UnicastRemoteObject;

    public class BankServer{
    public static void main (String[] args) {
    try{
    // LocateRegistry.createRegistry(8200);
    // SGBankImpl SGacc=new SGBankImpl();
    // UnicastRemoteObject.exportObject(SGacc,8200);
    // Naming.rebind(“SGAccount”,SGacc);

    Registry rsg = LocateRegistry.createRegistry(1099);
    SGBankImpl SGacc=new SGBankImpl();
    Remote objsg = UnicastRemoteObject.exportObject(SGacc,1099);
    rsg.bind(“SGAccount”,objsg);
    //rsg.unbind(“SGAccount”);

    Registry rdn = LocateRegistry.createRegistry(1097);
    DNBankImpl DNacc=new DNBankImpl();
    Remote objdn = UnicastRemoteObject.exportObject(DNacc,1097);
    rdn.rebind(“DNAccount”,objdn);
    //rdn.unbind(“DNAccount”);

    Registry rhn = LocateRegistry.createRegistry(1095);
    HNBankImpl HNacc=new HNBankImpl();
    Remote objhn = UnicastRemoteObject.exportObject(HNacc,1095);
    rhn.rebind(“HNAccount”,objhn);
    //rhn.unbind(“HNAccount”);

    // LocateRegistry.createRegistry(1099);
    // SGBankImpl SGacc=new SGBankImpl();
    // Context ctx =new InitialContext();
    // ctx.bind(“rmi://192.168.2.103:1099/SGAccount”,SGacc);

    System.out.println (“===============================”);
    System.out.println(“Server is running…..”);
    System.out.println (“===============================”);
    }
    catch (Exception ex){
    System.out.println (“Error”+ex);
    }
    }
    }

    Thầy cho em hỏi nếu em bỏ ra 2 server giữ lại 1 cái và port 1099 thì chạy bình thường, thấy có thể hướng dẫn em chạy trên nhiều port không thầy?

  190. Võ Văn Hải said

    Sao lại phải chạy nhiều port nhỉ? Trên port 1099 bạn có thể bound bao nhiêu services mà không được miễn nó không cùng tên thì thôi.

  191. Võ Văn Hải said

    Hi! Em quên cái EditPlus đi là vừa rồi. Tốt nhất là viết bằng Eclipse. Còn không nếu muốn gõ theo kiểu đó thì dùng NotePad++ gõ sau đó lưu xuống dạng unicode. Dùng command-line biên dịch thêm cái option -encoding UTF-8 nữa là xong.

  192. Võ Văn Hải said

    Em dùng KeyListener cho textfield (gõ chữ nào nhận chữ ấy). Tuy nhiên em cần phải xác định khi nào thì chuỗi nhập kết thúc.

  193. Minhneo said

    Registry rdn = LocateRegistry.createRegistry(1097);

    Remote objdn = UnicastRemoteObject.exportObject(DNacc,1097);

    Tất ca các số này trên 3 cái em để 1099 hết thì có cái đầu tiên chạy thôi thấy ah, cái nào nắm dưới thì nó báo lỗi ExceptionNotBound. Thầy có thể chỉ em sửa lại không ạ, 1 cái thì chạy còn 3 cái thì chỉ 1 cái chạy, em cũng mới tìm hiểu java nên cũng chưa rõ lắm. Cám ơn thầy!

  194. Võ Văn Hải said

    bạn có thể bind bao nhiêu cái tùy ý trên 1 registry:

    java.rmi.registry.LocateRegistry.createRegistry(1099);
    Context ctx=new InitialContext();
    ctx.bind("rmi:trmi01", obj1);
    ctx.bind("rmi:rmi02", obj2);
    
  195. Chí Công said

    Vấn đề peer to peer!

    Chào thầy, trước tiên em chúc thầy sức khỏe, em xin hỏi thầy về vấn đề này:
    Trường em, có ra một bài tập môn Mạng Máy Tính thực hiện một chương trình sử dụng mô hình lai giữa server-client và p2p.
    Em gặp vấn đề ở chổ không biết cách nào để giao tiếp và truyền dữ liệu giữa các peer với nhau (không thông qua server)…

    Thầy có thể hướng dẫn cho em cách nào giao tiếp giữa các peer với nhau được không?
    Nếu thầy có tài liệu liên quan đến vấn đề này thì thầy có thể gởi mail cho em được không (mail của em: chicong.2601@gmail.com)

    Em cảm ơn thầy rất nhiều!

  196. phong said

    thay oi chi dum e liet ke du lieu dang danh sach trong jsp di thay.thay cho e code di

  197. Nguyen Thanh said

    Chào mọi người.
    Mình có vấn đề này ai biết giúp mình cái với.
    Mình đang làm một trang web với jsp và cơ sở dữ liệu là MySql. Người dùng có tài khoản. Khi người dùng đăng nhập thì mình sẽ set account đó là đang đăng nhập dưới database để không ai đăng nhập ở máy khác được nữa, khi người dùng đăng xuất thì sẽ set lại là free. Vấn đề là nếu ng dùng không đăng xuất mà tắt trình duyệt thì mình không biết làm sao để truy cập database để set lại status cho account nên lần sau không đăng nhập được nữa. Vậy ai biết cách bắt sự kiện tắt trình duyệt trong jsp chỉ mình cái với, để khi người dùng tắt trình duyệt thì mình gọi hàm set lại status của account để lần sau vẫn đăng nhập bình thường.
    Thanks all.
    (p/s: ai biết chỉ mình với, nếu được gủi qua mail cho mình cái với: thanhtrung.xl@gmail.com)

  198. Võ Văn Hải said

    quote: “thay oi chi dum e liet ke du lieu dang danh sach trong jsp di thay.thay cho e code di”
    Tìm kỹ trong blog này đã có rồi bạn nhé!

  199. ugly said

    Thầy ơi ! e đang làm bài tập lớn đánh giá sinh viên.mà không biết cách phân quyền. Thầy hướng dẫn cho e với!

  200. Quý said

    Em chào thầy Hải!
    Em đang làm BTL về đề tài: Sắp xếp lịch học, ở đây học theo tín chỉ. Em đã tìm hiểu nhưng vẫn chưa tìm ra được thuật toán. Rất mong thầy giúp đỡ,
    Em cảm ơn!

  201. minhneo said

    Thầy cho em hỏi, em viết socket để tính +,-,*,/. Trong code client có socket=new Socket(“127.0.0.1″,1234) nếu em để vậy thì chạy bình thường ( trên 1 máy ). Nhưng mà nếu em đổi lại chính địa chỉ của máy em là 192.168.1.2 thì không chạy báo lỗi như ở dưới ( chạy cùng trên 1 máy ). Vì em muốn server để máy nào cũng chạy miễn client biết địa chỉ thì kết nối vô thôi. Mong thầy giúp em, cám ơn Thầy!

    C:\>java test
    java.net.ConnectException: Connection timed out: connect
    at java.net.DualStackPlainSocketImpl.connect0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketI
    mpl.java:69)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.ja
    va:337)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocket
    Impl.java:198)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java
    :180)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)
    at java.net.Socket.connect(Socket.java:579)
    at java.net.Socket.connect(Socket.java:528)
    at java.net.Socket.(Socket.java:425)
    at java.net.Socket.(Socket.java:208)
    at test.jButton1ActionPerformed(test.java:88)
    at test.access$000(test.java:5)
    at test$1.actionPerformed(test.java:40)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:20
    18)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.jav
    a:2341)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel
    .java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259
    )
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonL
    istener.java:252)
    at java.awt.Component.processMouseEvent(Component.java:6504)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
    at java.awt.Component.processEvent(Component.java:6269)
    at java.awt.Container.processEvent(Container.java:2229)
    at java.awt.Component.dispatchEventImpl(Component.java:4860)
    at java.awt.Container.dispatchEventImpl(Container.java:2287)
    at java.awt.Component.dispatchEvent(Component.java:4686)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832
    )
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)

    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
    at java.awt.Container.dispatchEventImpl(Container.java:2273)
    at java.awt.Window.dispatchEventImpl(Window.java:2713)
    at java.awt.Component.dispatchEvent(Component.java:4686)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707)
    at java.awt.EventQueue.access$000(EventQueue.java:101)
    at java.awt.EventQueue$3.run(EventQueue.java:666)
    at java.awt.EventQueue$3.run(EventQueue.java:664)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDo
    main.java:76)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDo
    main.java:87)
    at java.awt.EventQueue$4.run(EventQueue.java:680)
    at java.awt.EventQueue$4.run(EventQueue.java:678)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDo
    main.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:677)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThre
    ad.java:211)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.
    java:128)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThre
    ad.java:117)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)

    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)

    at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

  202. Võ Văn Hải said

    Xem ở đây nhé bạn: http://vovanhai.wordpress.com/java/l%e1%ba%adp-trinh-java-nang-cao/networking/l%e1%ba%adp-trinh-socket-t%e1%ba%a1o-%e1%bb%a9ng-d%e1%bb%a5ng-calculator/

  203. Chào thầy Hải và mọi người.
    Mình có vấn đề này ai biết giúp mình cái với.
    Mình đang làm một trang web với jsp và cơ sở dữ liệu là MySql. Người dùng có tài khoản. Khi người dùng đăng nhập thì mình sẽ set account đó là đang đăng nhập dưới database để không ai đăng nhập ở máy khác được nữa, khi người dùng đăng xuất thì sẽ set lại là free. Vấn đề là nếu ng dùng không đăng xuất mà tắt trình duyệt thì mình không biết làm sao để truy cập database để set lại status cho account nên lần sau không đăng nhập được nữa. Vậy ai biết cách bắt sự kiện tắt trình duyệt trong jsp chỉ mình cái với, để khi người dùng tắt trình duyệt thì mình gọi hàm set lại status của account để lần sau vẫn đăng nhập bình thường.
    Thanks all.
    (p/s: ai biết chỉ mình với, nếu được gủi qua mail cho mình cái với: thanhtrung.xl@gmail.com)

  204. Hoàng Ngọc Thanh said

    e chào thầy!
    thầy cho e hỏi có cách nào mà hiển thị được các ký tự mình nhập vào ở ô JPasswordField ko thầy.
    mà e muốn nó hiển thị ngay trong ô đó luôn à.
    ví dụ như e nhập mật khẩu sai thì nó báo ra “bạn nhập mật khẩu sai”
    e cảm ơn thầy!

  205. Võ Văn Hải said

    ẹc. nếu vậy thì bạn dùng JTextField chứ mắc chi mà dùng JPasswordField? Còn bạn muốn lấy chuỗi bạn nhập trong JPasswordField thì bạn dùng
    String psw=new String(yourJPF.getPassword());

  206. HaGiang said

    Thầy giúp em với.Cách nào để em tăng heap space lên được thầy.Em dùng lệnh:
    java -Xmx3G myclassName
    => could not reserve enough space for object heap
    còn nếu như dùng lệnh:
    java -Xmx4G myclassName
    =>this specified size exceeds the maximum representable size, could not create the java virtual machin

  207. HaGiang said

    Nhờ Thầy giúp em với.Em cần một cái mảng 5 chiều int [30][30][30][30][5000].Vì kích thước quá lớn,chương trình báo lỗi java heap space.Cách nào để em tăng heap space lên .Em dùng lệnh:
    java -Xmx3G myclassName
    => could not reserve enough space for object heap
    còn nếu như dùng lệnh:
    java -Xmx4G myclassName
    =>this specified size exceeds the maximum representable size, could not create the java virtual machin

  208. Quý said

    Em chào thầy Hải!
    Em đang làm BTL về đề tài: Sắp xếp lịch học, ở đây học theo tín chỉ. Em đã tìm hiểu nhưng vẫn chưa tìm ra được thuật toán. Rất mong thầy giúp đỡ,
    Thầy ơi giúp em với ạ!

    Em cảm ơn!

  209. Võ Văn Hải said

    “Sắp xếp lịch học, ở đây học theo tín chỉ. ”
    Cái này thầy chưa làm nên chưa biết thuật toán. Em nên gặp người làm thực tế phân lịch hỏi cách làm sau đó viết.

  210. Quý said

    Em cảm ơn thầy!

  211. nguyen van nam said

    Em chào thầy. Em mới hoc Java,lên chưa biết nhiều.Xin phép thầy cho em hỏi:
    Em có đề bài như sau:
    “Lập chương trình trên Form ,in ra tất cả các số nguyên tố từ 2 đến n (n là số nguyên).”.
    Lam thế nào mà in được trên Form. Xin thầy chỉ dạy

  212. Quàng Văn Hải said

    em chào thày,thày có thể giải đáp cho em làm sao cài được swingx trong netbean không em cài mãi mà không được nó báo lỗi
    “failed to load main-class mainfest attribute from”

  213. TungNT01650 said

    Em chao` thay`. Em moi bat dau hoc java. em co bai tap lien quan den treeSet. Em muon hoi? thay` la muon sinh so’ tu. dong trong treeSet thi` lam the nao` a.? Em khoi? tao 9 doi tuong cho no sap xep theo bang? chu~ cai. nhung cai so’ thu’ tu. thi` em ko biet lam the nao`. Mong thay` va cac ban giup do em.

  214. TungNT01650 said

    @Nguyễn Văn Nam. mạn phép thử trả lời câu hỏi của bạn. bạn dùng : [tên biến].setText(có thể chưa các biến khác đã được gán giá trị) để in ra.
    ví dụ bạn muốn in ra trên textarea nó sẽ là jtextare.setText(***);

  215. Hồ Công Danh said

    Hi Thầy,
    Em đang viết 1 ứng dụng client/server, có 2 dạng kết nối:
    1. Sử dụng Http
    2. Sử dụng socket.
    Develop trên ngôn ngữ java.
    Vậy, thầy có thể so sánh giữa socket và http dùm e không?
    Thanks!

  216. đào Lisa said

    thầy ơi, thầy có thể giành chút thời gian hướng dẫn em bài nj với :”viết chương trình tạo ra một bàn phím trên 2 máy tính A và B. viết chương trình điều khiển các sự kiện nhấn phím trên máy tính B thông qua máy tính A và hiện kết quả lân màn hình của máy B( thí dụ: khi nhấn một phím trên máy A cũng tương ứng với việc nhấn phím đó trên máy tính B).”
    em chân thành cảm ơn thầy nhiều ha. :)

  217. Võ Văn Hải said

    Http là giao thức web, còn Socket là 1 đối tượng trong java dựa trên TCP để giao tiếp qua mạng.
    Kết nối http-> dùng jsp mà viết

  218. Võ Văn Hải said

    Thì cái object em bỏ vào TreeSet em phải implements cái Comparable, trong đó em override compareTo(E other).
    EM phải so nếu 2 số bằng thì trả về 0, this.yourNum>other.yourNum thì trả về 1, ngược lại trả về -1 là xong.

  219. NguyenDuyTan said

    Chào Thầy và chào các bạn , mong thầy và các bạn chỉ giáo em mình với. Mình kết nối CSDL SQL Server 2000 , nhưng báo lỗi hoài. Đây là code:

    try{
    Connection con=null;
    Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver”);
    con=DriverManager.getConnection(“jdbc:sqlserver://localhost:1433;Databasename=TEST;User=sa;Password=123;”);
    System.out.println(“Successfully”);
    }catch(Exception e){
    e.printStackTrace();
    }

    Java báo lỗi : The TCP/IP connection to the host localhost, port 1433 has failed. Error: “Connection refused: connect. Verify the connection properties, check that an instance of SQL Server is running on the host and accepting TCP/IP connections at the port, and that no firewall is blocking TCP connections to the port.”

    Mình đã cài sqljdbc4 , và đã start Server!!
    Mong Thầy và các bạn giúp đỡ , mình xin cảm ơn rất nhiều.

  220. KTri said

    KTri said

    Your comment is awaiting moderation.
    November 12, 2011 at 2:32 am
    Dạ Em chào Thầy Hải và tất cả các bạn. Thầy Ơi .em dang học về lập trình mạng với java nên vẫn còn nhiều khó khăn em mong thầy và các bạn giúp em bài tập này với ạ :Viết chương trình theo mô hình Client-Server sử dụng socket ở chế độ có kết nối.Trong đó :+ server làm nhiệm vụ đọc 1 kí tự số từ 0 đến 9 .ví dụ :nhận số 0 trả về :không ,nhận số 9 trả về: chín…nếu nhận kí tự khác số thì trả về không phải số nguyên.
    +Client sẽ nhập vào 1 kí tự ,gửi qua server,nhận kết quả trả về từ server và thể hiện lên màn hình .

  221. Võ Văn Hải said

    Phải mở cái cổng 1433 ra em ơi. Vào Manager sau đó enable cái TCP/IP lên là OK.

  222. Võ Văn Hải said

    “Dạ Em chào Thầy Hải và tất cả các bạn. Thầy Ơi .em dang học về lập trình mạng với java nên vẫn còn nhiều khó khăn em mong thầy và các bạn giúp em bài tập này với ạ :Viết chương trình theo mô hình Client-Server sử dụng socket ở chế độ có kết nối.Trong đó :+ server làm nhiệm vụ đọc 1 kí tự số từ 0 đến 9 .ví dụ :nhận số 0 trả về :không ,nhận số 9 trả về: chín…nếu nhận kí tự khác số thì trả về không phải số nguyên.
    +Client sẽ nhập vào 1 kí tự ,gửi qua server,nhận kết quả trả về từ server và thể hiện lên màn hình .”

    Server như sau:

    package vovanhai.wordpress.com;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.util.Scanner;
    
    public class ChangeNum2String_Server {
    
    	public static void main(String[] args) throws Exception{
    		ServerSocket svr=null;
    		try {
    			svr=new ServerSocket(5555);
    			System.out.println("Server starting...");
    			//1.Chấp nhận kết nối
    			while(true){
    				final Socket soc=svr.accept();
    				new Thread(new Runnable() {
    					public void run() {
    						try {
    							//2.Lấy yêu cầu
    							Scanner in = new Scanner(soc.getInputStream());
    							String x=in.nextLine();
    							int so = Integer.parseInt(x);
    							//3.Xử lý
    							String chu=ChangeIt(so);
    							//4. Gửi đáp ứng
    							PrintWriter out = new PrintWriter(soc.getOutputStream(),true);
    							out.println(chu);
    						} catch (NumberFormatException e) {
    							e.printStackTrace();
    						} catch (IOException e) {
    							e.printStackTrace();
    						}
    					}
    				}).start();
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		finally{
    			if(svr!=null)svr.close();
    		}
    	}
    	private static String ChangeIt(int so) {
    		String s="";
    		switch(so){
    		case 0:s="không";break;
    		case 1:s="một";break;
    		case 2:s="hai";break;
    		case 3:s="ba";break;
    		case 4:s="bốn";break;
    		case 5:s="năm";break;
    		case 6:s="sáu";break;
    		case 7:s="bảy";break;
    		case 8:s="tám";break;
    		case 9:s="chín";break;
    		}
    		return s;
    	}
    }
     

    Client như sau:

    package vovanhai.wordpress.com;
    
    import java.io.PrintWriter;
    import java.net.Socket;
    import java.util.Scanner;
    
    public class ChangeNum2String_Client {
    	public static void main(String[] args)throws Exception {
    		Socket soc=null;
    		try {
    			//nối đến server
    			soc=new Socket("127.0.0.1",5555);
    			//1.Gửi yêu cầu
    			PrintWriter out=new PrintWriter(soc.getOutputStream(),true);
    			out.println("6");
    			//2.Lấy đáp ứng
    			Scanner in=new Scanner(soc.getInputStream());
    			String kq=in.nextLine();
    			//3. Xử lý
    			System.out.println("Nhận kết quả: "+kq);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		finally{
    			if(soc!=null)soc.close();
    		}
    		
    	}
    }
    
  223. KTri said

    Em chan thanh cam on Thay .Em Chuc Thay luon thanh cong trong cuoc song va trong moi linh vuc

  224. ngocHung said

    em chao thay va cac ban.em co 1 van de trong java em muon nho thay giup do. em co 1 bai tap lien quan den viec gui mail va nhan mail.em gap kho khan trong viec dua 1 danh sach mail add vao 1 comboBox. co nghia la khi minh nhan vao 1 ten mail trong listbox do thi no se hien ra trong 1 textFile. nhung gio em ko pit lam sao ma add cai danh sach do vao ComboBox duoc.mong thay ca cac ban giup do.em xin chan thanh cam on.va mong thay som hoi am

  225. oanh said

    e chao thay.thay cho e hoi.e dang lam bên j2me.e có doạn code viet calculator bang j2me.nhưng đó là viêt1 bàng đien thoai cảm ưng.e muón viêt tren dien thoai nokia bang phím bâm.mong thâý giup e.e cam on

  226. oanh said

    import javax.microedition.midlet.*;
    import javax.microedition.lcdui.*;
    //đặc tả class phần mềm Calculator
    public class Calculator extends MIDlet implements CommandListener {
    //định nghĩa các biến cần dùng
    private boolean midletPaused = false;
    private SampleCanvas mycanvas;
    private Command exitCommand;
    private Command backCommand;
    //định nghĩa các hàm chức năng
    private void initialize() {}
    public void startMIDlet() {
    Display display = Display.getDisplay(this);
    exitCommand = new Command(“D\u1eebng”, Command.EXIT, 1);
    backCommand = new Command(“Reset”, Command.BACK, 2);
    mycanvas=new SampleCanvas();
    mycanvas.addCommand(exitCommand);
    mycanvas.addCommand(backCommand);
    mycanvas.setCommandListener(this);
    display.setCurrent(mycanvas);
    }
    public void resumeMIDlet() {}
    public void switchDisplayable(Alert alert, Displayable nextDisplayable) {
    Display display = Display.getDisplay(this);
    if (alert == null) display.setCurrent(nextDisplayable);
    else display.setCurrent(alert, nextDisplayable);
    }
    public void commandAction(Command command, Displayable displayable) {
    if (command == backCommand) mycanvas.MyInit ();
    else if (command == exitCommand) {
    destroyApp(false);
    this.notifyDestroyed();
    }
    }
    public void exitMIDlet() {
    switchDisplayable (null, null);
    destroyApp(true);
    notifyDestroyed();
    }
    //điểm nhập của ứng dụng
    public void startApp() {
    if (midletPaused) resumeMIDlet ();
    else {
    initialize ();
    startMIDlet ();
    }
    midletPaused = false;
    }
    public void pauseApp() {
    midletPaused = true;
    }
    public void destroyApp(boolean unconditional) {}
    }
    //class đặc tả form làm việc của ứng dụng
    class SampleCanvas extends Canvas {
    //định nghĩa các hằng gợi nhớ cần dùng
    final int ADDID = 1;
    final int SUBID = 2;
    final int MULID = 3;
    final int DIVID = 4;
    final int EQUALID = 5;
    //định nghĩa các biến cần dùng
    Font font;
    Graphics gh;
    int ww, wh;
    int baseX, baseY;
    int bw,bh;
    String valdisp,strOldValue;
    int row, col;
    boolean fDot, fStartData;
    int OldOpID;
    //hàm khởi tạo đối tượng
    SampleCanvas() {
    //thiết lập font chữ cần dùng
    font = Font.getFont(Font.FACE_PROPORTIONAL,
    Font.STYLE_BOLD, Font.SIZE_LARGE);
    MyInit();
    }
    //hàm thiết lập trạng thái đầu cho Calculator
    public void MyInit() {
    //xác định độ rộng, độ cao của form
    ww=this.getWidth();
    wh = this.getHeight();
    //xác định độ rộng, độ cao của từng button
    bw= (ww-15)/4;
    bh = 25;
    //xác định vị trí trên trái của vùng làm việc
    baseX = 3; baseY= 4;
    valdisp = “0.”;
    fStartData = true;
    fDot = false;
    strOldValue = “0”;
    OldOpID = EQUALID;
    repaint();
    }
    //hàm xử lý phím ấn, hiện chỉ có khung sườn
    protected void keyPressed(int key) {
    int action = getGameAction(key);
    switch (action) {
    case LEFT:
    break;
    case RIGHT:
    break;
    case UP:
    break;
    case DOWN:
    break;
    case FIRE:
    break;
    }
    repaint();
    }
    //hàm cập nhật màn hình tinh thể lỏng
    protected void UpdateDisplay(int d) {
    if(fStartData) {
    valdisp = Integer.toString(d);
    fStartData = fDot = false;
    } else
    valdisp = valdisp + Integer.toString(d);
    repaint();
    }
    //hàm xử lý phím phép toán
    private void Op_Process(int op) {
    double dblOldValue;
    double dblValue;
    //xác định 2 toán hạng
    dblValue = Double.parseDouble(valdisp);
    dblOldValue = Double.parseDouble(strOldValue);
    //kiểm tra phép toán cần thực hiện
    switch (OldOpID) {
    case ADDID :
    dblValue = dblOldValue + dblValue; break;
    case SUBID:
    dblValue = dblOldValue – dblValue; break;
    case MULID:
    dblValue = dblOldValue * dblValue; break;
    case DIVID :
    dblValue = dblOldValue / dblValue; break;
    }
    valdisp = Double.toString(dblValue);
    strOldValue = valdisp;
    OldOpID = op;
    fStartData = true;
    }
    //hàm xử lý sự kiện ấn chuột (chạm màn hình cảm ứng)
    protected void pointerPressed(int x, int y) {
    //kiểm tra vị trí chuột có nằm trên các button?
    if (baseY+bh+3 > y || y > baseY + (bh+3)*6) return;
    //xác định vị trí button được chọn
    col = (x – baseX) / (bw+3);
    row = (y – baseY-bh-3) / (bh+3);
    switch (row) {
    case 0: //các button hàng đầu
    switch (col) {
    case 0: //nút C
    MyInit(); break;
    case 1: //nút sqrt
    valdisp = Double.toString(Math.sqrt(Double.parseDouble(valdisp)));
    break;
    case 2: //nút 1/x
    valdisp = Double.toString(1/Double.parseDouble(valdisp)); break;
    case 3: //nút /
    Op_Process(DIVID);
    }
    break;
    case 1: //các button hàng thứ 2
    switch (col) {
    case 0: //nút 7
    UpdateDisplay(7); break;
    case 1: //nút 8
    UpdateDisplay(8); break;
    case 2: //nút 9
    UpdateDisplay(9); break;
    case 3: //nút *
    Op_Process(MULID);
    }
    break;
    case 2: //các button hàng thứ 2
    switch (col) {
    case 0: //nút 4
    UpdateDisplay(4); break;
    case 1: //nút 5
    UpdateDisplay(5);break;
    case 2: //nút 6
    UpdateDisplay(6);break;
    case 3: //nút –
    Op_Process(SUBID);
    }
    break;
    case 3: //các button hàng thứ 3
    switch (col) {
    case 0: //nút 1
    UpdateDisplay(1);break;
    case 1: //nút 2
    UpdateDisplay(2); break;
    case 2: //nút 3
    UpdateDisplay(3);break;
    case 3: //nút +
    Op_Process(ADDID);
    }
    break;
    case 4: //các button hàng thứ 4
    switch (col) {
    case 0: //nút 0
    UpdateDisplay(0);break;
    case 1: //nút .
    if (fStartData) {
    valdisp = “0.”;
    fStartData = false;
    } else if (fDot==false) {
    valdisp = valdisp + “.”;
    fDot = true;
    }
    break;
    case 2: //nút +/-
    //nếu là số âm thì đổi thành dương và ngược lại
    if (valdisp.charAt(0)!= ‘-‘) {
    //chỉ đảo dấu khi giá trị khác 0
    if (Double.parseDouble(valdisp) != 0)
    valdisp = “-” + valdisp;
    } else valdisp = valdisp.substring(1);
    break;
    case 3: //nút =
    Op_Process(EQUALID);
    }
    break;
    }
    repaint();
    }
    //hàm hiển thị các đối tượng trong form
    protected void paint(Graphics g) {
    int x, y;
    gh = g;
    g.setFont(font);
    x = baseX;
    y = baseY;
    //vẽ textbox miêu tả màn hình display
    gh.setColor(128,128,128);
    gh.fillRect(x, y, ww-6,bh);
    gh.setColor(0,255,255);
    gh.drawRect(x, y, ww-6,bh);
    gh.setColor(255,255,255);
    gh.drawString(valdisp, ww-8, y, Graphics.RIGHT|Graphics.TOP);
    //vẽ hàng button thứ nhất
    y = y + bh+3;
    DispButton(x, y,”C”,0);
    DispButton(x+bw+3, y,”sqrt”,0);
    DispButton(x+(bw+3)*2, y,”1/x”,0);
    DispButton(x+(bw+3)*3, y,”/”,0);
    //vẽ hàng button thứ nhất
    y = y + bh+3;
    DispButton(x, y,”7″,0);
    DispButton(x+bw+3, y,”8″,0);
    DispButton(x+(bw+3)*2, y,”9″,0);
    DispButton(x+(bw+3)*3, y,”*”,0);
    //vẽ hàng button thứ nhất
    y = y + bh+3;
    DispButton(x, y,”4″,0);
    DispButton(x+bw+3, y,”5″,0);
    DispButton(x+(bw+3)*2, y,”6″,0);
    DispButton(x+(bw+3)*3, y,”-“,0);
    //vẽ hàng button thứ nhất
    y = y + bh+3;
    DispButton(x, y,”1″,0);
    DispButton(x+bw+3, y,”2″,0);
    DispButton(x+(bw+3)*2, y,”3″,0);
    DispButton(x+(bw+3)*3, y,”+”,0);
    //vẽ hàng button thứ 5
    y = y + bh+3;
    DispButton(x, y,”0″,0);
    DispButton(x+bw+3, y,”.”,0);
    DispButton(x+(bw+3)*2, y,”+/-“,0);
    DispButton(x+(bw+3)*3, y,”=”,0);
    }
    //hàm vẽ 1 button
    private void DispButton(int x, int y, String str, int flag) {
    if (flag==0) { //ở trạng thái chưa chọn
    gh.setColor(128,128,128);
    gh.fillRect(x, y, bw,bh);
    gh.setColor(0,255,255);
    gh.drawRect(x, y, bw,bh);
    gh.setColor(0,0,255);
    gh.drawString(str, x+15, y, Graphics.LEFT|Graphics.TOP);
    } else { //ở trạng thái đang chọn
    gh.setColor(0,0,255);
    gh.fillRect(x, y, bw,bh);
    gh.setColor(0,255,255);
    gh.drawRect(x, y, bw,bh);
    gh.setColor(255,255,255);
    gh.drawString(str, x+15, y, Graphics.LEFT|Graphics.TOP);
    }
    }
    }

  227. gaubaccuc said

    E Chào thầy, E Nhờ thầy giúp e bài này được ko ạ,
    – E muốn làm soft chạy trên mobile(Dùng ngôn ngữ j2me): Không cần giao diện mà nó chỉ cần thu thập dữ liệu của cái mobile rồi send đến server của mình. e xin cảm ơn thầy.

  228. Võ Minh Phụng said

    Thầy cho em hỏi các phương thức trong rmi chat đó thầy.Em cảm ơn thầy.

  229. Võ Minh Phụng said

    Thầy ơi,có demo thì share cho em tham khảo nghen thầy.Thanks thầy.

  230. Võ Văn Hải said

    “soft chạy trên mobile(Dùng ngôn ngữ j2me): Không cần giao diện mà nó chỉ cần thu thập dữ liệu của cái mobile rồi send đến server của mình.”
    Cái này vi phạm quyền riêng tư người dùng.
    Vả lại tôi cũng không rành về điều này.

  231. Thuy.Duong said

    Chào thầy, em muốn hỏi vấn đề về mảng 2 chiều của J2ME như sau:
    Em nhập vào textfield từ bàn phím ma trận vuông n x n, số âm dương lẫn nhau, mỗi phần tử số cách nhau bằng một khoảng trắng:

    12 -5 87
    14 78 0
    6 3 -1

    Làm cách nào để có thể tách mỗi phần tử số để đưa vào một mảng động 2 chiều ạ? Xin cảm ơn thầy trước

  232. Bùi Minh Đức
    e chào thầy Hải chào tất cả các a chị e trong 4room, e có câu hỏi như thế này ạ
    e đang phải làm về ” hiển thị các file như .doc và .pdf ” trên webform viết = C#, nhưng e chưa biết phải làm như thế nào.
    tức là có một file word hoặ pdf trong database rồi e phải làm thế nào để khi click Button xem thì nó sẽ hiển thị lên Lưới theo dạng word và pdf. Thầy và mọi người chỉ jum e nha. Thanks All

  233. nguyen dang said

    Em chào thầy.

    – Hiện em đang làm để tài JDic viết trên nền java nhưng vấn để ở csdl em không biết phải định nghĩa ra sao.
    – Để tạo csdl trên mysql hay sqlserver thì quá đơn giản. Nhưng vấn để là mình định nghĩa csdl của mình như thế nào để người dùng có thể mang đi mà không cần fải cài đặt thêm ctrình csdl nào hết thì fải làm sao thưa thầy

  234. Võ Văn Hải said

    “Để tạo csdl trên mysql hay sqlserver thì quá đơn giản. Nhưng vấn để là mình định nghĩa csdl của mình như thế nào để người dùng có thể mang đi mà không cần fải cài đặt thêm ctrình csdl nào hết thì fải làm sao thưa thầy”
    Em có thể dùng kỹ thuật Serialization để số hóa các dối tượng xuống file và khôi phục lại nó như là 1 cơ sở dữ liệu cơ bản.

  235. Cần said

    thầy ơi em có 1 vấn đề xin hỏi thầy là :

    Thầy chỉ giùm em làm sao có thể load dữ liệu từ csdl lên 1 textbox ….

  236. Quý said

    Em chào thầy!
    Thầy cho em hỏi câu này ạ: Tại sao trong java nên viết phương thức khởi tạo mặc định? Lấy ví dụ để giải thích thêm cho rõ.
    Em xin cảm ơn!

  237. DangQuocDien said

    Chao thay, thay cho em hoi ti nha vi em moi hoc lap trinh socket nen cung chua hieu nhieu lam .
    thay cho em hoi ve client/server: gia su csdl ten la “cauhoi” trong csdl co 1 table tbl_cauhoi voi 5 truong la: “Q” de luu cau hoi, “A” la dap an a,”B ” la dap an b, “C” luu dap an c, “D” luu dap an d. thay co cach nao lam cho server doc du lieu tu bang tbl_cauhoi sau do goi cho client.ben client thi nhan duoc cau hoi va dap an thi hien thi len form client nhu sau: “Q” hien thi tren Jtexarea, con 4 dap an “A”,”B”,”C”,”D” thi hien thi len 4 Jradiobutton tuong ung khong a.xin thay huong dan dum em. cam on thay!

  238. Võ Văn Hải said

    “Tại sao trong java nên viết phương thức khởi tạo mặc định?”
    Không bắt buộc phải viết default constructure cho mọi trường hợp. Tuy nhiên với 1 javabean chẳng hạn, bạn buộc phải có 1 default constructor.
    default constructor cho bạn cách thức tạo 1 đối tượng với các thuộc tính mặc định. Ví dụ bạn có 1 lớ tên A như sau
    class A{

    }
    sau đó để tạo 1 thể hiện của đối tượng A bạn viết như sau: A a=new A();
    Như vậy bạn dùng default constructor để tạo đối tượng.
    Giải thích 1 cách cặn kẽ thì cũng rất là dải. Bạn chịu khó đọc lại 1 chút về OOP sẽ rõ.

  239. Quý said

    Em cảm ơn thầy ạ!

  240. japanese1801 said

    thầy ơi!
    làm sao để chuyển đổi font chữ tiếng việt trong j2me thầy?

  241. hakanh said

    Thưa thầy!
    Em đã tạo kết nối tới CSDL thành công. Giờ em muốn xử lí kết quả, em muôn gán những kết quả truy vấn được từ CSDL cho hiển thị lên jList thì em cần làm như thế nào ạ!

  242. moihocjava said

    Thầy ơi, xin thầy chỉ giúp câu lệnh if(arg.matches(“\\-\\-?v(erbosity)?\\=\\d+”)) nằm trong đoạn lệnh sau:

    public static void main(String args[])
    {
    Run run = new Run();
    run.verbosity = 2;
    List directoriesToProcess = new LinkedList();
    String args1[];
    int j = (args1 = args).length;
    for(int i = 0; i 0)
    {
    run.setTextRepository(TextFactory.loadTextRepositoryFromDirectories(directoriesToProcess));
    } else
    {
    System.err.println(“Include at least one directory to read from as parameter!”);
    System.exit(2);
    }
    BasicExamplePipeline.addExampleTexts(run);
    run.addFilter(new LinnaeusSpeciesServiceNer());
    GnatServiceNer gnatServiceNer = new GnatServiceNer(new gnat.server.GnatService.Tasks[] {
    gnat.server.GnatService.Tasks.GENE_NER
    });
    bởi vì khi em dịch thì thấy báo lỗi: Include at least one directory to read from as parameter!
    em có tìm thử với biến arg.match đó nhưng k hiểu lắm..thầy coi giúp em với..
    cám ơn thày nhiều!

  243. lequocbao said

    thầy và các bạn ai có toàn bộ file nén project calculator giử dùm em với, em cảm ơn nhiều

  244. J2meBasic said

    Chào Thầy!
    em đang viết chương trình chat nhưng em chỉ biết cách tạo luồng để server và client nói chuyện với nhau, giờ em muốn client chat với client thì làm thế nào
    đây là chương trình của em:
    //TimeServer.java
    import java.io.DataOutputStream;
    import java.net.*;
    import java.util.Date;

    public class TimeServer{
    public static void main(String args[]) throws Exception{
    ServerSocket server=new ServerSocket(7000);
    System.out.println(“khoi dong server”);
    while(true){
    Socket socket=server.accept();
    new doRequest(socket).start();
    //socket.close();
    }
    }
    }
    class doRequest extends Thread {
    Socket socket;
    DataOutputStream dos;
    public doRequest(Socket sk) {
    socket=sk;
    }
    public void run(){
    try{
    dos=new DataOutputStream(socket.getOutputStream());
    while(true){

    //String time=new Date().toString();
    Date time=new Date();
    dos.writeUTF(“server tra lai thoi gian he thong:”+time);
    Thread.currentThread().sleep(1000);

    }
    }catch(Exception e)
    {
    //System.out.println(“loi dorequest”);
    }
    }

    }

    //TimeClient.java
    /**
    * @(#)TimeClient.java
    *
    *
    * @author
    * @version 1.00 2012/2/17
    */
    import java.io.DataOutputStream;
    import java.io.DataInputStream;
    import java.net.Socket;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.TimeZone;

    public class TimeClient{

    public static void main(String arg[]) throws Exception{
    Socket socket=new Socket(“localhost”,7000);
    String[] listID=TimeZone.getAvailableIDs();
    for(String id:listID)
    System.out.println(id);
    while(socket.getInputStream()!=null){

    DataInputStream din=new DataInputStream(socket.getInputStream());
    SimpleDateFormat formatter=new SimpleDateFormat();
    Date time=new Date();
    String str=din.readUTF();
    // String str = “2012/02/20″;
    try{
    time=formatter.parse(str);
    }catch(ParseException e){

    }
    //Object listID=new Object();

    System.out.println(time.getSeconds());
    }
    }

    }

    cảm ơn thầy.

  245. J2meBasic said

    xin lỗi em nhầm file
    đây là chương trình chat:

    ///**
     * @(#)SimpleChatServer.java
     *
     *
     * @author 
     * @version 1.00 2012/2/17
     */
    import java.io.*; 
    import java.util.*; 
    import java.net.*; 
    /*Chuong trinh chat don gian 
     Server nhan message tu Client 
     */ 
    public class SimpleChatServer { 
      public static void main(String[] args) throws Exception 
    { 
        ServerSocket server = new ServerSocket(7000); 
        System.out.println("Server is started");     
             
        while(true) {   
     		Socket socket = server.accept(); 
     		new doRequest(socket).start();
        } 
        //socket.close();  
      } 
    }
    class doRequest extends Thread{
    	Socket socket;
    	DataInputStream din;
    	DataOutputStream dos;
    	public doRequest(Socket sk){
    		socket=sk;
    	}
    	public void run(){
    	try{
    	
    	din=new DataInputStream(socket.getInputStream());
    	Scanner kb=new Scanner(System.in);
    	dos=new DataOutputStream(socket.getOutputStream());
    //	PrintWriter out=new PrintWriter(dos,true/*auto-flush*/);
    	while(true){
    		String nhan=din.readUTF();
    		System.out.println(nhan);
    		System.out.print("server: ");
    		String gui=kb.nextLine();
    		dos.writeUTF("server:"+gui);
    		dos.flush();
    		kb=kb.reset();
    	}
    	}catch(Exception e)
    	{
    		
    	}
    	}
    }
    
    /**
     * @(#)SimpleChatClient.java
     *
     *
     * @author 
     * @version 1.00 2012/2/17
     */
    import java.io.DataInputStream; 
    import java.io.DataOutputStream; 
    import java.net.Socket; 
    import java.util.*; 
     
    /*Chuong trinh chat don gian 
     *Cient nhan chuoi tu ban phim gui den server 
     *Nhan du lieu tu server 
    */
    public class SimpleChatClient { 
      public static void main(String[] args) throws Exception { 
        Socket socket = new Socket("localhost", 7000); 
        DataInputStream din = new  
          DataInputStream(socket.getInputStream()); 
           
           DataOutputStream dos = new  
             DataOutputStream(socket.getOutputStream()); 
         
          //nhap chuoi de gui den sever  
        Scanner kb = new Scanner(System.in); 
             
        while(true) {   
                       
        System.out.print("haithuong: "); 
        	String msg=kb.nextLine(); 
                        
         dos.writeUTF("haithuong: "+msg); 
         dos.flush(); 
                
         //nhan du lieu tu server 
          String st = din.readUTF(); 
          System.out.println(st); 
           
          kb = kb.reset(); 
        }   
               
        } 
     
      } 
    
  246. J2meBasic said

    thầy có thể cho em một ví dụ về mutil-Line textbox không?
    em đang tìm cách để hiển thị nội dung chat (swing) mà không biết dùng đối tượng nào trong java.
    cảm ơn thầy.
    mong thầy giúp đở

  247. Nguyễn Thị Thu said

    Thầy ơi cho em hỏi cách để chuyển dữ liệu từ jTable trong java ra file Excel?

  248. Yin Yang said

    Một server cũng có thể coi là 1 client, bạn có thể truyền trực tiếp dữ liệu giữa 2 client với nhau hoặc thông qua một server làm trung gian.

  249. Thông Anh (Lập trình viên Aptech) said

    Thầy ơi cho em hỏi, em đang làm eProject đề tài “Quản lí nguồn nhân lực”, Gồm có các gian đoạn :
    1/ Problem definition
    2/ Identification customer requirements
    3/ Database design
    4/ Data flow diagram
    5/ Algorithm
    6/ Coding
    Nếu muốn làm bước 4 ( Data flow diagram) tốt thì phải dựa vào bước 3(Database design), làm được bước 5(Algorithm) tốt thì dựa vào bước 4 phải không thầy? nếu bước 4 làm không kỉ (làm sai), thì bước 5 cũng sai theo luôn phải không thầy?

    Nhóm em có 3 người, Bạn làm bước 4 thì nói : Data flow diagram không nên làm kỉ, tại vì đã làm bước 5 rồi, nếu làm kỉ quá thì không cần phải có bước 5.
    Vậy bạn em nói đúng hay sai? xin thầy giải đáp cho em, cám ơn thầy!

  250. Võ Văn Hải said

    multiline textbox= JTextArea

  251. Phạm Hồng Nam said

    Thầy ơi.Em mới học java.Thầy cho em hỏi: muốn import 1 bức ảnh đuôi jpg trong eclipse thì phải làm thế nào ạ .Thầy có thể cho em 1 bài để em tham khảo được không ạ

  252. Võ Văn Hải said

    “muốn import 1 bức ảnh đuôi jpg trong eclipse …”
    Bạn tạo 1 thư mục(folder) con của project (giả sử tên images) sau đó copy hình từ máy tính paste vào đó. Sau đó bạn truy xuất hình nằm trong thư mục đó bằng đường dẫn tương đối images/tenhinh.jpg.

  253. Lê Hoài Hân said

    Chào Thầy!
    Em là thành viên mới của web.
    Nay em vào đây xin thầy chỉ giúp em code của sự kiện sau đây:
    From của em gồm:
    EventID; Title; Description; Photo; Datestar; Dateend;
    Em không biết đoạn code khi mà thời gian bắt đầu event đến lúc kết thúc thì button Register sẽ Enabled(true), còn nếu chưa đến thời gian bắt đầu Event hay đã qua thời gian kết thúc Event thi button Register sẽ Enabled(false). Và được viết bằng EJB 3.
    Mong thầy giúp em.

  254. Phạm Hồng Nam said

    em cũng làm cách đó ùi nhưng mà nếu ảnh jpg cỡ khoảng 3000×2000 thì ảnh import bị lỗi ạ.Em không biết phải làm thế nào ạ
    Thầy có thể cho em 1 bài mẫu được không ạ

  255. Lâm said

    Chào thầy em đang tạo chương trình thi trắc nghiệm giữa mạng lam bằng socket.Em muốn bên sever tự động gửi câu hỏi về khi bên client nhấn nút bắt đầu thi thì phải làm thế nào?

  256. Dai Hoang said

    Thầy có thể giúp em chèn video trong java được không ạ ?

  257. meocon said

    Thầy ơi! Thầy có thể hướng dẫn giúp em xuất 1 file java ra report hoặc PDF được không, em cảm ơn Thầy.

  258. meocon said

    Thầy ơi làm ireport nhưng khi nhập câu sql select * from tênbang thì báo lỗi. mặc dù
    mình đã test kết nối csdl và báo là thành công rồi.
    Query error

    Message:
    net.sf.jasperreports.engine.JRException: org.postgresql.jdbc1.Jdbc1PreparedStatement.setFetchSize(I)V
    Level:
    SEVERE
    Stack Trace:
    org.postgresql.jdbc1.Jdbc1PreparedStatement.setFetchSize(I)V
    com.jaspersoft.ireport.designer.data.fieldsproviders.SQLFieldsProvider.getFields(SQLFieldsProvider.java:444)
    com.jaspersoft.ireport.designer.connection.JDBCConnection.readFields(JDBCConnection.java:470)
    com.jaspersoft.ireport.designer.wizards.ConnectionSelectionWizardPanel.validate(ConnectionSelectionWizardPanel.java:146)
    org.openide.WizardDescriptor$7.run(WizardDescriptor.java:1357)
    org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:572)
    org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:997)

  259. minh hieu said

    Em xin nhờ mấy Anh Chị và Thầy Hải giúp đỡ em. Em đang học Java thầy em giao cho em lam đồ án báo cáo về” quản lý vật tư nông nghiệp bằng phần mềm NetBeans IDE và My SQL” mà cho em thời gian chỉ có 4 ngày mong thầy và các anh chi nếu có bài thì cho em xin, em rất cảm ơn.

  260. minh hieu said

    Địa chỉ : Email:thiensutimban_2007@yahoo.com

    Không thì nhờ mấy Thầy Hải hay mấy anh chị hướng dẫn dùm em chi tiết cách làm bài để em kịp nộp cho thầy .
    Nếu có thì cho em em cảm ơn rất nhiều!

  261. Đặng Việt Dũng said

    em sử dụng JEditorPane để hiện thị code html nhưng vẫn bị lỗi hình và nút bấm hiện lung tung…..thầy có cách nào khắc phục xin chỉ e với

  262. Hai mut buoi tao said

    hai mut buoi tao

  263. lâm said

    Bài viết rất hay. Thanks

  264. Nên đi hay dừng lại said

    Ngẫm và nghĩ
    Đừng nghĩ bạn được bao nhiêu điểm. Đừng nghĩ bạn học ở trường nào. Đừng nghĩ bạn tốt nghiệp loại gì. Hãy nghĩ: MÌNH CÓ GÌ TRONG ĐẦU.
    Em đã từng nghĩ như Thầy và học những thứ mình thích và thế là bây giờ bị bằng TBK. Em đang dạy 1 trường…và em cảm thấy ko bằng lòng với chính mình. Em muốn học lên để kiếm 1 chỗ đứng tốt hơn trong ngành giáo dục. Nhưng lướt qua mấy trang Web tuyển thì yêu cầu bằng Thạc Sỹ và đại học ở mức khá trở lên.
    Em chẳng biết có nên học lên nữa ko Thầy ! Cơ hội sẽ như thế nào ?
    Em cảm ơn Thầy !

  265. Võ Văn Hải said

    Có điều kiện thì cứ học đi em. Hãy luôn vươn lên khi có cơ hội. CHúc em thành công!

  266. van tien said

    chào thầy ạ! em đang làm một bài tiểu luận về đề tài: tìm hiểu giao thức FTP. xây dựng chương trình FTPChat để gửi và nhận file qua mạng giữa các người dùng với nhau.
    thầy cho em hỏi trong java có hổ trợ giao thức FTP không ạ! em chỉ biết về socket TCP/IP trong java mấy ạ. nhờ thầy xem giúp em nên chuẩn bị những kiến thức gì để hoàn thành bài tiểu luận ko ạ! em cám ơn thầy!

  267. Trần Tuấn Việt said

    Em xin chào thầy.
    Em đang làm một đồ án về Socket. Đề bài có yêu cầu chỉ được sử dụng thư viện giao tiếp mạng Socket & ServerSocket để dựng một web server, web server này sẽ xử lý yêu cầu gói GET của client. Vấn đề của em là xử lý yêu cầu kết nối Keep-alive (Persistence). Em chỉ nhận request & trả response được lần đầu, những lần tiếp theo thì không được do không nhận được request của client (request bị null). Em có gửi e-mail cho thầy source code của em để thầy hiểu rõ hơn về vấn đề của em.
    Mong thầy giúp đỡ và cho em chút ý kiến. Em cảm ơn thầy nhiều!

  268. Trần Tuấn Việt said

    Dạ thưa thầy, em đã tìm ra nguyên nhân và xử lý được rồi. Em cảm ơn thầy!

  269. Bơ vơ giữa đời said

    Em đang cần 1 host hỗ trợ JSP. Xin Thầy cho em hỏi có trang nào hỗ trợ host JSP free tốt ko ? Em cảm ơn Thầy !

  270. Đỗ Hoàng Việt said

    cho e hỏi chút là e muốn lấy dữ liệu từ jtable (hiển thị từ 1 database khác nhưng có chung khóa với bảng db mà e muốn nhập vào). thì khi e chọn vào 1 dòng thông tin trên jtable thì nó cho e lấy đoạn thông tin đó thay cho việc viết nhập vào textfeild. để e add vào bảng db mới. mong thầy chỉ điểm giúp e với!

  271. Hùng Lê said

    em cần so sánh cấu trúc hình học của 1 cái protein(input) với 20 ngàn cái protein khác (database) trên cùng 1 con cpu(single core processor). Em muốn dùng multi-threading để minimize thời gian tính toán, nhưng không biết cần bao nhiêu cái thread là hợp lý, nó phụ thuộc vào từng hệ điều hành, và tài nguyên máy như thế nào, cho em xin code.
    Cám ơn thầy nhiều

  272. Email của em là tahongdongvfu@gmail.com

  273. Kimanh said

    Em xin chào thầy Hải. Em tình cờ đọc trên trang web này nên biết Thầy. Thầy ơi có thể giúp em làm thế nào để in hóa đơn trong java mà khi kích vào in sẽ hiện ra giống repost không ak. mong Thầy giúp đỡ. Thank you.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
Follow

Get every new post delivered to your Inbox.

Join 2,205 other followers

%d bloggers like this: