Avatar billede idiotbarn Nybegynder
19. juli 2005 - 14:56 Der er 8 kommentarer og
1 løsning

sign applet, for en gangs skyld

Jeg er ved at lave et applet hvor brugeren skal kunne vælge filer på sin computer og programmet finder derved den fulde sti til disse filer.

Jeg er gået ud fra dette kun kan laves som java applet, da brugeren skal kunne vælge flere filer af gangen.

Jeg kan så ikke bruge JFileChooser uden at signere min applet. Jeg har været en del rundt på eksperten og på nettet, men har hovedsagligt fulgt:
http://java.sun.com/developer/onlineTraining/Programming/JDCBook/signed.html

Har dog stadig nogen spørgsmål:
1) Hvis man "Self-sign" sin applet, fungere det kun for et halvt år, men kan man opdatere den hvert halve år?

2) Hvis ikke den skal være "Self-sign" bliver man nød til at købe det?

3) På ovenstående side ser det for mig ud som at selv om man har signeret sin applet, bliver brugeren nød til at hente et certifikat for at kunne bruge den. Er det ikke muligt bare at få et skilt op om man vil tillade appletten at få adgang?
Avatar billede arne_v Ekspert
19. juli 2005 - 15:03 #1
re 1)

Jeg mener bare at brugeren så får at vide at certifikatet er ukendt *OG* at
certifikatet er udløbet.

Men da en applet jo hentes fra din web server er det vel ikke noget
problem at opdatere den !?

re 2)

Ja.

Du kan sikkert sagtens få en anden til at underskrive, men skal det være
en underskift som er kendt af browseren så skal du betale.

re 3)

Nej den prompter selvom certifikatet ikke er importeret.

Hvis de importerer certifikat så slipper de for prompt.
Avatar billede arne_v Ekspert
19. juli 2005 - 15:05 #2
lidt inspiration:

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;

import javax.swing.*;

public class UploadManagerApplet extends JApplet implements ActionListener {
    private final static String UPLOAD_URL = "http://localhost/upload.asp";
    private JButton select;
    private JTextArea files;
    private JButton upload;
    private String dirname;
    private String[] filenames;
    public void init() {
        getContentPane().setLayout(new BorderLayout());
        select = new JButton("Select dir");
        select.addActionListener(this);
        getContentPane().add(select, BorderLayout.NORTH);
        files = new JTextArea();
        getContentPane().add(new JScrollPane(files), BorderLayout.CENTER);
        upload = new JButton("Upload");
        upload.addActionListener(this);
        getContentPane().add(upload, BorderLayout.SOUTH);
    }
    public void actionPerformed(ActionEvent ev) {
        if(ev.getSource() == select) {
            JFileChooser chooser = new JFileChooser(System.getProperty("user.home"));
            chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
            if(chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
                File dir = chooser.getSelectedFile();
                dirname = dir.getAbsolutePath();
                filenames = dir.list();
                StringBuffer sb = new StringBuffer("");
                for(int i = 0; i < filenames.length; i++) {
                    sb.append(filenames[i]);
                    sb.append("\r\n");
                }
                files.setText(sb.toString());
            }
        }
        if(ev.getSource() == upload) {
            for(int i = 0; i < filenames.length; i++) {
                upload(dirname, filenames[i]);
            }
        }
    }
    private void upload(String dirname, String filename) {
        try {
            URL url = new URL(UPLOAD_URL + "?filename=" + filename);
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            con.setRequestMethod("POST");
            con.setDoOutput(true);
            InputStream is = new FileInputStream(dirname + File.separator + filename);
            OutputStream os = con.getOutputStream();
            byte[] b = new byte[100000];
            int n;
            while((n = is.read(b)) >= 0) {
                os.write(b, 0, n);       
            }
            con.connect();
            if (con.getResponseCode() == HttpURLConnection.HTTP_OK) {
                //JOptionPane.showMessageDialog(this, filename + " uploaded");
            } else {
                JOptionPane.showMessageDialog(this, filename + " not uploaded");
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(this, filename + " not uploaded");
        }
    }
}
Avatar billede idiotbarn Nybegynder
19. juli 2005 - 15:32 #3
Ok, det er da vist nemmere end jeg lige troede med hensyn til certifikatet, men når jeg nu har lavet en jar fil der er signet, og får lyst til at lave om i min .java fil, skal jeg så det hele igennem igen med at lave en ny jar fil, og signere den igen?
Avatar billede arne_v Ekspert
19. juli 2005 - 15:34 #4
ja, men det tager vel 2 sekunder med en bat fil
Avatar billede idiotbarn Nybegynder
19. juli 2005 - 15:37 #5
ja...godt tænkt :)
Troede der var en del flere problemer i det, men det er jo fantastisk.
Ligger du et svar? og må man spørge hvad du laver til dagligt? der er da godt styr på programmeringen ihvertfald...
Avatar billede arne_v Ekspert
19. juli 2005 - 15:38 #6
svar
Avatar billede arne_v Ekspert
19. juli 2005 - 15:39 #7
klik på mit navn og vælg "vis brugerinfo" og læs mit minisite
Avatar billede idiotbarn Nybegynder
19. juli 2005 - 16:42 #8
nåh ja, mens jeg husker det...
kan jeg gi min applet parametre?
jeg har prøvet at fange "args" i public static void main( String args[] )
(det er en JApplet), men det er den ikke helt med på?
Avatar billede arne_v Ekspert
19. juli 2005 - 17:34 #9
eksempel:

<APPLET CODEBASE="." CODE="CurveApplet.class" ARCHIVE="curve.jar" WIDTH="500" HEIGHT="300">
<PARAM NAME="title" VALUE="Curve Demo">
<PARAM NAME="data" VALUE="test data">
<PARAM NAME="values" VALUE="1,2,4,8,16,32">
</APPLET>

...
public class CurveApplet extends JApplet {
    public void init() {
        String title = getParameter("title");
        String data = getParameter("data");
        StringTokenizer st = new StringTokenizer(getParameter("values"), ",");
        double[] x = new double[st.countTokens()];
        int ix = 0;
        while (st.hasMoreTokens()) {
            x[ix] = Double.parseDouble(st.nextToken());
            ix++;
        }
        init(title, data,x);
    }
    public void init(String title, String data, double[] val) {
...
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