Avatar billede badass Nybegynder
24. april 2003 - 12:17 Der er 17 kommentarer og
2 løsninger

IOException - fejlkoder

Hvor kan jeg finde en oversigt over fejlkoder vedr. IOException

Eks.
CreateProcess: C:/Data/J5/SkatteBrgTester/Output/Virk.pdf error=193
Avatar billede soreno Praktikant
24. april 2003 - 12:19 #1
Det lyder mere som en Windows fejl.
Fejlkoden er defineret således:
#define ERROR_BAD_EXE_FORMAT 193L

Altså, en pdf fil er ikke en exe fil.
Avatar billede soreno Praktikant
24. april 2003 - 12:21 #2
Måske du skal gøre noget ala dette:
String filnavn = "C:\\Data\\J5\\SkatteBrgTester\\Output\\Virk.pdf";
Runtime.getRuntime().exec("cmd.exe /c " + "\"" + filnavn  + "\"" );
Avatar billede soreno Praktikant
24. april 2003 - 12:22 #3
Men det vil sansynligvis kun virke på winnt/2k/xp
Avatar billede arne_v Ekspert
24. april 2003 - 12:22 #4
Det lyder som en:

Runtime.getRuntime().exec("et eller andet");

hvor "et eller andet" ikke er korrekt.

F.eks. en PDF fil ude at der er tilknyttet en default applikation til PDF.
Avatar billede arne_v Ekspert
24. april 2003 - 12:23 #5
Hvis der ikke er en default applikation skal du enten have
tilknyttet sådan en - eller eksplicit angive programmet
filen skal åbnes med.
Avatar billede badass Nybegynder
24. april 2003 - 12:25 #6
Mit problem er at mit applikation skal skal starte Acrobat Reader, som en pdf-fil er associaceret til, men det kan kun lade sig gøre hvis jeg skrive følgende linie
p = Runtime.getRuntime().exec("C:/Program Files/Adobe/Acrobat 5.0/Reader/AcroRd32.exe C:/Data/J5/SkatteBrgTester/Output/Virk.pdf");

Hvis jeg derimod skriver
p = Runtime.getRuntime().exec("C:/Data/J5/SkatteBrgTester/Output/Virk.pdf");
opstår fejlen.

Det er jo ikke holdbart at man skal angive stien til readeren
Avatar billede arne_v Ekspert
24. april 2003 - 12:26 #7
Hvis jeg skulle bygge videre på sørens eksempel:

String filnavn = "C:\\Data\\J5\\SkatteBrgTester\\Output\\Virk.pdf";
Runtime.getRuntime().exec("\"C:\\Program Files\\Adobe\\Acrobat 4.0\\Reader\\AcroRd32.exe\"" + "\"" + filnavn  + "\"" );
Avatar billede arne_v Ekspert
24. april 2003 - 12:27 #8
Hov.

Du må ikke bruge / i exec på Windows.

Prøved med \ (altså \\) !
Avatar billede arne_v Ekspert
24. april 2003 - 12:28 #9
Altså:

p = Runtime.getRuntime().exec("C:\\Data\\J5\\SkatteBrgTester\\Output\\Virk.pdf");
Avatar billede badass Nybegynder
24. april 2003 - 12:29 #10
Jeg vil gerne undgå at skulle angive en explicit sti til readeren
Avatar billede arne_v Ekspert
24. april 2003 - 12:30 #11
Forklaring:

Java IO konverterer selv fra / til \ iden den kalder Windows, men exec
bliver sendt direkte til Windows og Windows forstår ikke /.
Avatar billede badass Nybegynder
24. april 2003 - 12:35 #12
Det gør ingen forskel.
Jeg må finde en måde at lokaliseres readeren på så
Avatar billede soreno Praktikant
24. april 2003 - 12:37 #13
arne:
det dur ikke (12:28:20). Windows forventer at skulle eksekvere en eksekverbar fil - det er en .pdf ikke.

Derfor skal det ske via cmd.exe i win2k/xp (og sikkert også nt)
import java.io.*;
import java.util.*;

public class Main
{
    public static void main(String[] args)
    {
        try
        {
            String pdf = "test.pdf";
            Runtime.getRuntime().exec("cmd.exe /c \"" + pdf + "\"");
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
}
Avatar billede soreno Praktikant
24. april 2003 - 12:38 #14
I win9x skal man muligvis gøre sådan:
Runtime.getRuntime().exec("command.com /c \"" + pdf + "\"");

(har ingen test mulighed)
Avatar billede soreno Praktikant
24. april 2003 - 12:41 #15
Alternativet kunne være at distribuere dit program med en execute.exe fil som f.eks. kunne se sådan ud (c++):

#include <windows.h>

int main(int argc, char **argv)
{
    if(argc>1)
    {
        for(int i=1;i<argc;i++)
        {
        ShellExecute(NULL, "open", argv[i], NULL, NULL, SW_NORMAL);
        }
    }
    return 0;
}

Så vil det virke på både win9x og 2k/xp

Runtime.getRuntime().exec("execute.exe \"" + pdf + "\"");
Avatar billede soreno Praktikant
24. april 2003 - 12:43 #16
En anden løsning kunne være at forgrene din kode på baggrund af:
String retval = System.getProperty("os.name");
Avatar billede arne_v Ekspert
24. april 2003 - 13:10 #17
Søren har ret.

cmd.exe /c
command.exe /c

ser ud til at være det der skal til.
Avatar billede arne_v Ekspert
24. april 2003 - 13:17 #18
Men det kræver naturligvis stadigvæk at der er en applikation
tilknyttet PDF.

Og det er absolut anbefalelsesværdigtat bruge \ i.s.f. /, da / ikke
virker med alle Win32 applikationer.
Avatar billede badass Nybegynder
24. april 2003 - 13:37 #19
Tak skal i ha'.

I får halvdelen af points'ne hver
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