Jag har utvecklat ett program som analyserar data i en fil och visar detta. Dessa filer har ändelsen .slp. När man dubbelklickar på dessa filer vill jag att mitt program skall starta och att denna fil ska öppnas. Jag har gjort en association från filer som slutar med .slp till mitt program med hjälp av ett installationsprogram. Men som det är nu öppnas bara själva programmet, inte filen jag klickar på. Hello. Hm, jag förstår inte riktigt. Ok, jag tänkte att du öppnade ett nytt fönter när du öppnade en fil. Men så är det alltså inte ? Tack för att det är någon som svarar!! Hello. Ja, jag testade arg[0], arg[1] osv, men då fick jag felmeddelanden. Därför testade jag att skriva: argv.length och den är lika med 0! Alltså får jag inte in några argument till min main?! Men det kanske inte är så konstigt? Jag kör ju nu med JBuilder och då vet jag inte hur jag ska mata in argument till main? För när jag testkör koden, då öppnas ju programmet och sedan måste man välja Arkiv->öppna, och filen öppnas. Jag vet inte hur jag ska testköra programmet när jag dubbelklickar på en fil?! >Men det kanske inte är så konstigt? Jag kör ju nu med JBuilder Ja, det var det som var meningen: att man ska kunna öppna en fil på två olika sätt: antingen genom att öppna programmet och sedan välja fil i menyn, eller att man dubbelklickar direkt på den filen som man vill ska öppnas. Precis som om man öppnar ett visst word-dokument. Nu öppnas liksom bara programmet (Word) utan fil i. Ja just det ja... En miss från min sida... :-P hur associerar man en fil till ett Java-program? Hej <hur associerar man en fil till ett Java-program? <Man kan starta en JAR fil med hjälp av en genväg Tack så HEMSKT mycket, alla som har hjälp mig! <<hur associerar man en fil till ett Java-program? Hej Diana Ja, precis, jag har gjort en installationsfil där jag har associerat .slp filerna till en exefil. Denna exe fil körs alltså om jag öppnar en .slp fil och denna exe-fil kör i sin tur min jar-fil med mitt java-program!open?
Hur gör jag? Jag har försökt olika metoder:
Så här ser min mainfunktion ut:
static public void main(String args[])
{
try
{
new MainWindow();
}
catch (Throwable t)
{
System.err.println(t);
t.printStackTrace();
System.exit(1);
}
}
Den gör alltså en ny MainWindow. Härifrån kan användaren öppna valfri fil genom att välja Arkiv->Öppna, detta genom en funktion openFile. (Men nu vill jag alltså att den fil man klickade på skall öppnas "automatiskt".)
Jag har testat att lägga till en till konstruktor till MainWindow:
Så här såg den första ut:
public MainWindow() {
//some code
}
Denna har jag lagt till:
public MainWindow(String filename){
f=filename;
//some code
openFile(f);
}
Jag har även testat att lägga till en till main (detta vet jag inte om det är rätt. Först klagade den på static, så jag skippade den och skrev följande):
public void main(String filename)
{ try
{
String f;
f=filename;
new MainWindow(f);
}
catch (Throwable t)
{
System.err.println(t);
t.printStackTrace();
System.exit(1);
}
}
Hur ska jag göra för att få programmet att fatta att jag har klickat på en fil och hur ska den veta vilken fil jag klickat på??!!
Hjälp!
/DSv: open?
Hur visar du filen? Är det i en ny frame? Isf kan du göra en public static main i framen.
och peka ut den som startprogram för dina filer.Sv: open?
MainWindow ärver från JFrame. Det är i denna som filen visas, den består av en massa menyer. (Ungefär som Word kan man säga.)
/DianaSv: open?
I så fall får du kolla om det skickas med några parametrar till ditt program typ en sökväg till filen, vet inte hur det funkar men jag tycker att informationen borde skickas med i anropet.
Sen kan du loopa igenom din array i din mainmetod och skriv ut vad som skickas med.
lite rörigt skrivet kanske men hoppas du va med på noterna.
PeterSv: open?
Men jag är inte riktigt med. Jag är inte så hemma vad gäller main argumenten.
När användaren öppnar filen via programmet sätts sökvägen till filen via "opendialog rutan" och sedan anropas openFile med denna sökväg. Men hur ska jag kunna testa programmet då jag dubbelklickar på en fil? Då måste jag väl ha gjort en jar-fil eftersom det är installationsprogrammet som associerar från .slp filen så att mitt program skall köras? (Hoppas att jag kan testa detta på annat sätt!)
Jag vet heller inte vad som bestämmer vad som skickas med som argument.
Snälla förklara lite mer?!Sv: open?
Vad jag menar är:
förhoppningsvis så skicka sökvägen till filen du klickat på till din mainmetod i form av ett argument.
din main ser ut så här:
<code>
public static void main(String argv[]){
//din kod.
}
</code>
argumentet till din main metod är då String argv[] en stringarray. om du loopar igenom den typ:
<code>
for(int i=0; i<argv.length();i++){
System.out.println("argv:: "+argv[i]+ " position "+i);
}
</code>
OBS! ej testad kod.
då skrivs alla argument ut i konsolen. Och du kan då se om det finns en sökväg till filen med. Om sökvägen skickas med kan du skicka den till din metod som öppnar dina filer.
Berätta gärna hur det går... :-)
Peter.Sv: open?
(Nu har jag gjort så att jag komilerar allt och sedan gör jar-fil av det och kör skarpt.)
/DSv: open?
Nä, då är det inte så konstigt. :-)
Det som var intressant var väl när du klickar på en fil som är kopplad till dit program?
Eller missförstod jag dig?
>Jag vet inte hur jag ska testköra programmet när jag dubbelklickar på en fil?!
>(Nu har jag gjort så att jag komilerar allt och sedan gör jar-fil av det och kör skarpt.)
Det låter som en bra idé. Kom ihåg att ha utskriften i main kvar bara...
Peter.Sv: open?
Och det fungerar inte när jag gjort jar-fil av det och dubbelklickar! Det är ju då som programmet öppnas men inte filen jag dubbelklickade på.
/DSv: open?
Men släng in en dialogruta i programmet. (du får iof bygga nytt jar)
Om du inte visste det innan:
<code>
String strMed="Argument: \n";
for(int i=0;i<argv.length();i++){
strMed += "Nr "+i+" "+argv[i] + "\n";
}
javax.swing.JOptionPane.showMessageDialog(null,strMed);
</code>
ej testat!
så ska det dyka upp en meddelanderuta med alla argument.
PeterSv: open?
Man kan väl inte associera en fil med en JAR eller?
/Johan - väldans undrandeSv: open?
Jag vet inte riktigt hur man associera en fil men...
Man kan starta en JAR fil med hjälp av en genväg
Man tar och skapar en genväg som startar exe filen javaw
och som inparameter sätter man jar filen.
Alltså
Försök få javaw att starta en jar fil från ett dosfönster.
När du får det att fungera kan man skapa en genväg som tar jar filen som en växel.
På precis samma sätt gör exempelvis word när man skall öppna ett word dokument.
Så det borde gå att associera en jar fil så att den kan köras direkt vid dubbelklick
Det är i teorin altså. Om det skulle fungera Borde man kunna få en slp fil som personen ovan vill få fungera. Men jag är lite ringrostig på java. Jag skall se om jag inte skulle kunna koda ett litet java program o testa.
En sak till. Om man använder sig av suns JRE så skall ni veta att man kan kopiera installationen och lägga den i en separat katalog. Den katalogen kan följa med när man installerar sitt program. Och då kan man köra sitt program genom att peka det på denna katalog. På så sätt kan man distribuera sin java runtime version och bli oberoende av vad användaren redan har installerat. Tyvärr är det så att vissa java motorer inte är fullt bakåt kompatibla.
Men det vara bara en parantes.
/MarkusSv: open?
<Man kan väl inte associera en fil med en JAR eller?
Nej, det kan man nog inte. Jag associerar den egentligen till en exe-fil som i sin tur kör jar-filen.
/DSv: open?
<Man tar och skapar en genväg som startar exe filen javaw
<och som inparameter sätter man jar filen.
<Försök få javaw att starta en jar fil från ett dosfönster.
Oj, du får nog förklara närmre. Hur skapar man en genväg, och hur skriver man för att starta exe-filen javaw, så här: .\j2re1.4.0\Bin\javaw.exe ?
Jag vet inte ens hur man kör ett java program från dos-fönstret!
/D Sv: open?
När jag gjorde dialogrutan var första argumentet = sökvägen till filen som jag ska öppna, alltså rätt argument!!
Då löste det sig genom att jag skrev så här:
static public void main(String args[])
{
try
{
if (args.length >0){
String f = new String(args[0]);
new MainWindow(f);
}
else
new MainWindow();
}
catch (Throwable t) {
System.err.println(t);
t.printStackTrace();
System.exit(1);
}
}
:-)
/DianaSv: open?
<<Man kan väl inte associera en fil med en JAR eller?
<Nej, det kan man nog inte. Jag associerar den egentligen till en exe-fil som i sin tur kör jar-filen.>
ok...men det du behöver göra då är ju att fånga commandlinen i det programmet. Filnamnet kommer in som ett argument i commandlinen, därefter kan du ju starta ditt java program inifrån det programmet med filnamnet som argument i en metod...
/Johan
------------
Verkar som du löste det mao....mitt inlägg var lite sent..bortse från detta...Sv: open?
Om jag förstått dig rätt så har du skapat en exe fil med hjälp av ett installationsprogram. Sedan associerar du slp filen till denna exe fil.
Exe filen i sin tur kör ditt java program som ligger i en jar fil
korrekt?
/MarkusSv: open?
/D