Skapa körbar bat fil för java program

Permalänk

Skapa körbar bat fil för java program

Hallå!

Började med java igår, kommit till sidan 23 i Java direkt boken
Rätt så kul faktiskt!

Har kört fast rejält när man ska skapa en bat fil som man kan köra sitt program i.

Detta har jag knappat in i Netbeans IDE 4.1.

import javax.swing.*;

public class Hej21 {
public static void main (String[] arg) {
String namn;
String hälsning;
namn = JOptionPane.showInputDialog("Vad heter du?");
hälsning = "Välkommen " + namn;
JOptionPane.showMessageDialog(null, hälsning, "Meddelande", JOptionPane.INFORMATION_MESSAGE);
System.exit(0);
}
}

(Slut)

I boken står att man ska göra en bat fil och skriva java classnamn (Hej21 antar jag....), det enda som ska stå i den tydligen.

och vips så ska det fungera men det gör det inte :S
Får felmeddelande:
Exception in thread "main" java.lang.NoClassDefFoundError: Hej21

Skulle behöva lite råd vad det kan vara

Permalänk
Medlem

Har du glömt kompilera?

java Hej21

Funkar perfekt i en batfil.

Exception in thread "main" java.lang.NoClassDefFoundError: Hej21

Dyker upp om jag försöker köra när det inte är kompilerat.

Visa signatur

Nej är också service.

Permalänk
Medlem

Den säger är den inte kan hitta klassen Hej21, har du döpt filen till Hej21.java? Annars bör du göra det.

Edit: Såg vad Rushdie skrev, stämmer. Du måste skriva "javac Hej21" innan "java Hej21" eller kompilera den bara innan du kör bat-filen.

Permalänk

Om jag går ut i CMD och skriver javac Hej21.java så får jag detta.

Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/tools/javac/Main

que? ^^

Ja, filen heter Hej21.java

Permalänk
Medlem

Det är inte alls säkert att den hitar den. Det beror på vilken classpath som är satt.

Det som kan hjälpa är om du lägger batfilen i samma katalog som klassfilen och har följande i batfilen istället.

java -classpath . Hej21

//C

Permalänk

Hej conio

Har bat filen i samma katalog men fick samma fel.
Exception in thread "main" java.lang.NoClassDefFoundError: Hej21

Verkar vara något när man ska skriva javac så den ska kompilera filen som ni skrev, hur fixar man detta?

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av tomtenirc
Hej conio

Har bat filen i samma katalog men fick samma fel.
Exception in thread "main" java.lang.NoClassDefFoundError: Hej21

Jag hoppas du har kompilerat källkoden. Källkoden skrivs i filer med filändelsen .java (Hej21.java i detta fallet). Sedan måste man kompilera, dvs producera ett maskintolkbart resultat, i Javas fall så är det .class-filer.

Om du har kompilerat källkoden så ska det finnas en Hej21.class där också, om det inte gör det så har antingen klassfilen hamnat någon annanstans eller så har du faktiskt inte kompilerat den.

Som övrig kuriosa kan jag nämna att det är .class-filerna som man skickar ut till de som ska köra programmet.

Edit: Såg att du var osäker på att du kompilerat. Antingen bygger du i NetBeans (borde finnas något som säger build class eller compile). Kan inte NetBeans själv, så jag kan inte hjälpa dig där.

Du kan ju annars kompilera själv med kommandoradsverktyget javac. Det gör du genom att skriva javac Hej21.java (bygger en klassfil utifrån en javafil).

//C

Permalänk

Tack!

Såg att Netbeans hade en Compile och att filen la sig under en massa andra kataloger än vad .java filen låg, jag kopierade .class filen till där .java filen ligger och skrev java Hej21 så funka det skiiitbra

Äntligen kan man byta sida

Permalänk

mitt funkar inte heller

När jag skriver en .bat fil med texten " java textspel" (min fil heter så textspel.java och jag har textspel.class i samma mapp också)

C:\Program\JCreator LE\MyProjects\TextSpel>java textspel
Exception in thread "main" java.lang.UnsupportedClassVersionError: textspel (Uns
upported major.minor version 49.0)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)

vad är fel?

Visa signatur

By CrowZoneMan

Permalänk
Medlem

Re: mitt funkar inte heller

Citat:

Ursprungligen inskrivet av CrowZoneMan
När jag skriver en .bat fil med texten " java textspel" (min fil heter så textspel.java och jag har textspel.class i samma mapp också)

C:\Program\JCreator LE\MyProjects\TextSpel>java textspel
Exception in thread "main" java.lang.UnsupportedClassVersionError: textspel (Uns
upported major.minor version 49.0)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)

vad är fel?

Kör en gammal java tolk kanske? .. Kan vara så att du försöker köra ett program kompilerat för Java 5, men din tolk är för gammal.

Permalänk
Medlem

Re: mitt funkar inte heller

Citat:

Ursprungligen inskrivet av CrowZoneMan
När jag skriver en .bat fil med texten " java textspel" (min fil heter så textspel.java och jag har textspel.class i samma mapp också)

C:\Program\JCreator LE\MyProjects\TextSpel>java textspel
Exception in thread "main" java.lang.UnsupportedClassVersionError: textspel (Uns
upported major.minor version 49.0)
vad är fel?

Felet är att klassfilerna är gjorda för en nyare version än den Java-körtidsmiljö du använder (Java Runtime Environment, JRE).

Med andra ord, du har använt en kompilator som genererat klassfiler för en nyare version (i det här fallet Java 5, (1.5)) än den körtidsmiljö du använde.

Om du skriver java -version på kommandoraden så kommer den säga att 'java' är version 1.4 eller något som är äldre än 1.5.

Lösningsalternativ:

1) Ändra din PATH så att du pekar ut en 'java.exe' som motsvarar den version som du kompilerar för.

2) Ändra din batfil så att du kör c:\jdk1.5.0_03\bin\java textspel istället (problemet är då att andra behöver ändra sina batfiler).

3) Reducera klassfilens Javaversionskrav, så om du vill ha en klassfil för Java 1.3 så använd 'javac -source 1.3 -target 1.3 textspel.java'. Observera att detta inte nödvändigtvis betyder att ditt program kommer fungera på 1.3 Använder du klasser som inte finns i den versionen så kommer filen kompileras, men inte kunna köras.

//C

Permalänk

conio,
1) vet inte hur man ändrar path

2)den får felmeddelandet "Exception in thread "main" java.lang.NoClassDefFoundError: textspel/java" (är det för att jag har en fil till med en class och metoder?)

3 får meddelandet "javac är inte ett internt kommando, externt kommando
program eller kommandofil."

uppskattar hjälp

Visa signatur

By CrowZoneMan

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av CrowZoneMan
1) vet inte hur man ändrar path

På den svarar jag det lite ohjälpsamma svaret att du får försöka leta reda på det själv (har inte riktigt tid/lust att förklara det ingående just nu). Det handlar i alla fall om att ändra en miljövariabel i windows som heter PATH så att den först pekar ut din JDK-bin katalog (till exempel c:\jdk1.5.0_03\bin).

Citat:

2)den får felmeddelandet "Exception in thread "main" java.lang.NoClassDefFoundError: textspel/java" (är det för att jag har en fil till med en class och metoder?)

Nej, det felet får du för att du gör fel 8-). När man kör kommandot 'java' så ska man bara ange klassens namn. I det här fallet så hittar den ingen klass i paketet textspel som heter java.

Din klass heter ju textspel, så i det här fallet så borde det stå i kommandoraden eller vart du nu anger det enbart 'textspel', inget mer, inget mindre. (För att det är så klassnamnet är)

Citat:

3 får meddelandet "javac är inte ett internt kommando, externt kommando
program eller kommandofil."

Ah, då bygger du innifrån JCreator misstänker jag (såg en JCreatorsökväg längre upp). Då kan du inte kompilera via kommandorad, för att din java-kompilator kan inte hittas, vilket beror på att den inte finns med i PATH:en (se punkt 1).

//C

Permalänk
Medlem

Vad har du för java bok?

själv läser ja en ganska gammal bok, Avancerad Pocket Java. 1999

Visa signatur

Stationär: Ubuntu GB DQ6 P35 | Q6600 | 4GB ram Corsair 2*2gb 800mhz (3.5gb) |1tb SATA + 500gb SATA + 250gb SATA | Sparkle 9800gt Passiv
Laptop: Lenovo 3000 v200 | Ubuntu |