Avatar billede xsix Nybegynder
03. december 2008 - 13:27 Der er 8 kommentarer og
1 løsning

Currency Converter med RMI

Hej Eksperter.
Jeg står med denne her opgave omkring en Currency Converter som skal laves som en client / server med RMI.
Jeg har lavet alt koden, problemet er bare nu at den skal deles op i client og server, det er meningen at selve udregningen skal ske på serveren og så skal interfacen ligge hos clienten.

Jeg har siddet og prøvet i meget lang tid efterhånden og jeg kan slet ikke overskue hvordan jeg skal kunne gøre det.

Min kode ser således ud:

import java.util.HashMap;
import javax.swing.JOptionPane;
import java.io.*;

public class CurrencyConverter extends javax.swing.JFrame {
   
   
    public CurrencyConverter()
    {           
        initComponents();     
    }
   
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                         
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jComboBox1 = new javax.swing.JComboBox();
        jLabel3 = new javax.swing.JLabel();
        jComboBox2 = new javax.swing.JComboBox();
        jLabel4 = new javax.swing.JLabel();
        jTextField1 = new javax.swing.JTextField();
        jLabel5 = new javax.swing.JLabel();
        jTextField2 = new javax.swing.JTextField();
        jButton1 = new javax.swing.JButton();
        jMenuBar1 = new javax.swing.JMenuBar();
        jMenu1 = new javax.swing.JMenu();
        jMenu2 = new javax.swing.JMenu();
        jMenu3 = new javax.swing.JMenu();
        jButton2 = new javax.swing.JButton();
        jLabel6 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jLabel1.setText("Pick Currency");

        jLabel2.setText("From");

        jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "AUD", "CHF", "CNY", "DKK", "EUR", "GBP", "SEK", "USD" }));
        jComboBox1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jComboBox1ActionPerformed(evt);
            }
        });

        jLabel3.setText("to");

        jComboBox2.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "AUD", "CHF", "CNY", "DKK", "EUR", "GBP", "SEK", "USD" }));
        jComboBox2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jComboBox2ActionPerformed(evt);
            }
        });

        jLabel4.setText("Enter amount");

        jLabel5.setText("Result");

        jButton1.setText("Convert");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jMenu1.setText("File");
        jMenuBar1.add(jMenu1);

        jMenu2.setText("Help");
        jMenuBar1.add(jMenu2);

        jMenu3.setText("About");
        jMenuBar1.add(jMenu3);

        jButton2.setText("Reset");
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });

        jLabel6.setText("Valuta Converter");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 90, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(jLabel2)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(jLabel3)
                                    .addGroup(layout.createSequentialGroup()
                                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                                            .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                                    .addComponent(jButton1)
                                                    .addComponent(jComboBox2, javax.swing.GroupLayout.PREFERRED_SIZE, 75, javax.swing.GroupLayout.PREFERRED_SIZE))
                                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                                    .addComponent(jTextField1, javax.swing.GroupLayout.DEFAULT_SIZE, 75, Short.MAX_VALUE)
                                                    .addComponent(jButton2, javax.swing.GroupLayout.DEFAULT_SIZE, 75, Short.MAX_VALUE)))
                                            .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                                                .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, 75, javax.swing.GroupLayout.PREFERRED_SIZE)
                                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                                    .addComponent(jLabel5)
                                                    .addComponent(jLabel4, javax.swing.GroupLayout.DEFAULT_SIZE, 75, Short.MAX_VALUE)
                                                    .addComponent(jTextField2))))
                                        .addGap(13, 13, 13))))))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(65, 65, 65)
                        .addComponent(jLabel6, javax.swing.GroupLayout.PREFERRED_SIZE, 118, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addGap(48, 48, 48))
        );

        layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {jComboBox1, jComboBox2});

        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(6, 6, 6)
                .addComponent(jLabel6)
                .addGap(11, 11, 11)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel1)
                    .addComponent(jLabel4, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel2)
                    .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel3)
                    .addComponent(jLabel5))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jComboBox2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 21, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButton1)
                    .addComponent(jButton2))
                .addContainerGap(18, Short.MAX_VALUE))
        );

        layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {jComboBox1, jComboBox2});

        pack();
    }// </editor-fold>                       

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                       
        // TODO add your handling code here:
  try
  {       
       
        HashMap currencyMap = new HashMap <String, Double>();
       
       
    File file = new File("C:\\Temp\\currencys.txt");
    FileInputStream fis = null;
    BufferedInputStream bis = null;
    DataInputStream dis = null;

    try {
      fis = new FileInputStream(file);

      bis = new BufferedInputStream(fis);
      dis = new DataInputStream(bis);

      while (dis.available() != 0) {

        currencyMap.put(dis.readLine(), Double.parseDouble(dis.readLine()));
      }
     
      fis.close();
      bis.close();
      dis.close();

    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
       
        Double value1 = (Double) currencyMap.get(jComboBox1.getSelectedItem());
        Double value2 = (Double) currencyMap.get(jComboBox2.getSelectedItem());
       
        Double amount = Double.parseDouble(jTextField2.getText()); //Converts the amount into a double
        Double result = 1/value1 * value2*amount; //calculates the digits that the user has typed in.
       
        String printOut = Double.toString(result);
        jTextField1.setText(printOut);
        float floatPrintOut = Float.valueOf(printOut.trim()).floatValue();
        String formatPrintOut = String.format("%,.2f", floatPrintOut);
       
        jTextField1.setText (String.valueOf(formatPrintOut));
        }
        catch(NumberFormatException exception)
        { 
        JOptionPane.showMessageDialog(null, "Wrong amount, try again!", "Error Message", JOptionPane.ERROR_MESSAGE);
        jTextField1.setText("");
        jTextField2.setText("");
    }
       
    }                                       

    private void jComboBox1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
    }                                         

    private void jComboBox2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
    }                                         

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                       
        // TODO add your handling code here:
       
        jTextField1.setText(""); // Enables the "Reset" - button to clear everything in both fields
        jTextField2.setText(""); // Enables the "Reset" - button to clear everything in both fields
    }                                       
   
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new CurrencyConverter().setVisible(true);
            }
        });
    }
   
    // Variables declaration - do not modify                   
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JComboBox jComboBox1;
    private javax.swing.JComboBox jComboBox2;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JMenu jMenu1;
    private javax.swing.JMenu jMenu2;
    private javax.swing.JMenu jMenu3;
    private javax.swing.JMenuBar jMenuBar1;
    private javax.swing.JTextField jTextField1;
    private javax.swing.JTextField jTextField2;
    // End of variables declaration                 
   
}
Avatar billede xsix Nybegynder
03. december 2008 - 13:36 #1
Ved godt koden ser lidt voldsom ud, men bare skip fra der hvor der står:
// <editor-fold defaultstate="collapsed" desc="Generated Code">
til der hvor der står:
}// </editor-fold>
Avatar billede arne_v Ekspert
03. december 2008 - 15:04 #2
Hvor meget ved du om RMI ?

Du skal have:

- et interface
- en klasse implementerer det interface som laver beregningen
- din GUI
Avatar billede xsix Nybegynder
03. december 2008 - 16:35 #3
Meget meget lidt, har lavet en simpel lommeregner ved hjælp af copy paste, bare for at se at der er forbindelse og at det virker.
Det er nok det der frustrerer mig mest, at jeg ikke helt ved hvordan man gør, men jeg skal aflevere det som opgave om et par dage.

Men dvs. at jeg ligeså godt kan starte forfra?
Avatar billede arne_v Ekspert
03. december 2008 - 16:46 #4
OK.

Jeg har lavet en lille artikel om start med RMI:
  http://www.eksperten.dk/spm/855118
men den fortaeller nok ikke noget nyt udover din bog.

Du skal ikke starte forfra.

Du skal lave det interface.

Og saa skal du lave en implementation klasse hvor indmaden i den relevante kode
kan genbruges fra det du har.

Og saa kan du genbruge det meste af din kode til client GUI.
Avatar billede xsix Nybegynder
07. december 2008 - 16:40 #5
Hmm dit link går bare ind til det her spørgsmål.

Jeg kan bare ikke rigtig finde ud af hvordan jeg skal gøre med at dele koden op i de forskellige elementer.
Avatar billede arne_v Ekspert
07. december 2008 - 16:49 #6
Ups. Det rigtige link er http://www.eksperten.dk/artikler/25 !
Avatar billede arne_v Ekspert
07. december 2008 - 16:51 #7
Du skal have:
- interface
- server klasse (og en server main)
- GUI incl. en actionPerformed som kalder server
Avatar billede xsix Nybegynder
07. december 2008 - 17:19 #8
Ja det ved jeg, men har ingen idé om hvilke dele af koden jeg skal sætte hvorhen og hvorfor.
Men jeg har efterhånden givet op med det, og så må jeg bare aflevere det uden RMI.
Avatar billede xsix Nybegynder
21. maj 2009 - 16:53 #9
Fik desværre aldrig det svar jeg skulle bruge, så lukker igen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester