我做了一個應用程序,使用Swing和Hibernate設施,我的老師告訴我必須使用Socket進行客戶端/服務器通信(這是我的大學的作業)。例如,應用程序正在爲不同的表進行插入/更新/刪除操作,並且我有一個JFrame,用戶正在寫入數據,並且在按下插入/更新/刪除按鈕之後,正在對數據庫進行更改。但我真的不知道如何改變這個程序,以便它使用Socket。客戶端必須是執行操作的按鈕,它調用服務器上的方法,對數據庫進行更改,然後將結果返回給客戶端?或者我應該如何在這個程序中使用Socket?如何在我的情況下使用套接字?
也許有人可以幫我一些想法。提前致謝!
下面是代碼,在這裏我使用Swing和Hibernate的:
public class AdaugaProdus extends javax.swing.JFrame {
private final Session session;
public AdaugaProdus() {
session = HibernateUtil.getSessionFactory().openSession();
initComponents();
initComboBoxes();
}
private void initComboBoxes() {
IdFurnComboBox.removeAllItems();
IdCatComboBox.removeAllItems();
IdRaftComboBox.removeAllItems();
List<Furnizor> furnizori = session.createQuery("from Furnizor").list();
for (Furnizor furnizor : furnizori)
IdFurnComboBox.addItem(furnizor);
List<Categorie> categorii = session.createQuery("from Categorie").list();
for (Categorie categorie : categorii)
IdCatComboBox.addItem(categorie);
List<Istoricprod> rafturi = session.createQuery("from Istoricprod").list();
for (Istoricprod raft : rafturi)
IdRaftComboBox.addItem(raft);
}
private void InsereazaButtonActionPerformed(java.awt.event.ActionEvent evt) {
runQueryBasedOnInsert();
}
private void runQueryBasedOnInsert(){
try{
org.hibernate.Transaction tx = session.beginTransaction();
Produs produs = new Produs();
int idFurn = ((Furnizor)IdFurnComboBox.getSelectedItem()).getIdfurn();
Furnizor furnizor = new Furnizor(idFurn);
produs.setFurnizor(furnizor);
int idCat = ((Categorie)IdCatComboBox.getSelectedItem()).getIdcat();
Categorie categorie = new Categorie(idCat);
produs.setCategorie(categorie);
int idRaft = ((Istoricprod)IdRaftComboBox.getSelectedItem()).getIdraft();
Istoricprod istoricprod = new Istoricprod(idRaft);
produs.setIstoricprod(istoricprod);
produs.setDenumire(DenumireTextField.getText());
produs.setCantitate(Integer.parseInt(CantitateTextField.getText()));
produs.setUnitmas(UnitMasTextField.getText());
session.save(produs);
tx.commit();
}
catch(Exception e){
System.out.println(e.getMessage());
}
/*finally{
session.close();
}*/
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new AdaugaProdus().setVisible(true);
}
});
}
爲什麼你認爲你需要一個Socket?你知道一個Socket是用來做什麼的嗎?您當前的代碼中沒有提到Socket。 –
我想你可能正在尋找一個服務器/客戶端通信框架。 – krico
@JimGarrison我沒有說我在我的代碼中使用Socket,我的意思是我必須(這是一個家庭作業),我問我該怎麼做。我不知道如何調整我的代碼來使用這個工具,因爲我需要藉助套接字來進行服務器/客戶端通信。就像我在上面的帖子中所說的那樣:在客戶端中移動actionperformed()方法(一個新的Java文件)並從這裏調用位於服務器(另一個Java文件)中的方法是一個好主意,數據庫中的更改並將結果返回給客戶端?或者我應該如何在我的情況下使用套接字?如果有人有想法。 – alin