Just nu i M3-nätverket
Gå till innehåll
mykk

Java program i Xcode och Terminal

Rekommendera Poster

mykk

Hej!

 

Jag håller på att lära min Java från grunden, och har två frågor. Först, hur kan man skriva en enkel Javakod i Xcode och sedan kompilera och köra programmet? Xcode har så många alternativ att jag är lite förvirrad. Bör man välja ett projekt (och i så fall vilket?) eller går det att bara skriva en fil (vilkn typ?).

 

Jag har prövat att kompilera Javaprogrammet i Terminals Shellscript: Det gick bra att kompilera den (med filen "javac"), men det gick inte att köra den (med "java"). Gjorde jag ett fel, och i så fall vilket?

 

Tack på förhand och vänlig hälsning

M

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Mattiasgbg

Alltså det här är verkligen inte något jag kan, men du skrev

javac filnamn.java

och sedan

java filnamn.class

? (Alltså "class" på slutet andra gången)

 

Det har fungerat det lilla jag har testat...

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
OlaMontan

Först och främst så komplilerar du med

 

javac test.java

 

med du kör programmet med

 

java test

 

om du inte har en "package"-rad först i test.java. Om du t ex har "package se.ola.min;" först i test.java, så kör du med:

 

java se.ola.min.test

 

När du kör programmet skriver du alltså klassnamnet, inte filnamnet.

 

 

För att skriva ett Java-program i XCode så skapar du lämpligen ett Java-projekt med swing-klasserna. Som jag förstod det, så går det inte längre att skriva Cocoa-program med Java längre, sedan Intel är processorn. Du kan alltså inte rita upp programmets användargränssnitt osv när du skriver Java. Jag försökte, men kunde då bara skapa PowerPC-program från Java. Däremot var det inga problem att använda swing-biblioteket.

 

Vill du veta mer, så kan jag kolla hemma hur jag gjorde mitt Java-program.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Mattiasgbg

Förlåt, fel av mig :unsure:

 

(Det där med "class". Har ju hänt förr.)

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
mykk
...

och sedan

java filnamn.class

? (Alltså "class" på slutet andra gången)

 

Det har fungerat det lilla jag har testat...

 

Tack, Mattias. Jag har gort det, men när jag kör får jag felmeddelandet:

 

Exception in thread "main" java.lang.NoClassDefFoundError: filnamn/class

 

(Det är kanske därför att det inte skapas någon fil som heter filnamn.class ?)

Redigerad av mykk

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
mykk

Nu funkar det! Jag har upptäckt felet: det att jag inte samma namn för filen som för klassen! Nu har jag sparat filen som klassnamn.java, och det funkade när jag körde kommandot java klassnamn. Tack, Mattias och Ola. Nu går det att forsätta lära mig Java.

Redigerad av mykk

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
mykk

Däremot går det fortfarande inte att skapa ett Javaprogram i Xcode, varken som Java Swing Applet eller som Java Swing Application. Vet någon varför?

Redigerad av mykk

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
OlaMontan

Vad menar du med att det inte går? Vad är det som händer?

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
mykk
Vad menar du med att det inte går? Vad är det som händer?

 

Det visas ett program som redan har kod skriven i editorn. Om jag klistrar in mitt eget program, visas ett felmeddelande med en massa rader, och ett fönstret med texten att applet inte kan köras.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
OlaMontan

OK, jag ser ditt problem. Du vill skapa ett Java-program som inte har några Mac-menyer, fönster eller dialoger. Jag trodde du ville skapa ett program som ser ut som ett Mac-program.

 

Starta XCode.

New Project

Välj Java -> Java Tool

Next

Projektnamn: Bilar (blir namnet på din huvudklass med main()-metoden)

Finish

Öppna nu src -> Bilar.java och ersätt all text med ditt program som du skckade.

Build and Go

 

För att se resultatet måste du öppna konsollen i XCode: Run -> Console

 

Du kommer tyvärr alltid ha problem med ÅÄÖ på Mac.

 

Om du skulle välja "Java Application" som projekt så måste du skapa en massa kod för att generera menyer, dialoger med mera. XCode ger dig en grund med en del klasser som generar något som kör.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
mykk
OK, jag ser ditt problem. Du vill skapa ett Java-program som inte har några Mac-menyer, fönster eller dialoger. Jag trodde du ville skapa ett program som ser ut som ett Mac-program.

 

Starta XCode.

New Project

Välj Java -> Java Tool

Next

Projektnamn: Bilar (blir namnet på din huvudklass med main()-metoden)

Finish

Öppna nu src -> Bilar.java och ersätt all text med ditt program som du skckade.

Build and Go

 

För att se resultatet måste du öppna konsollen i XCode: Run -> Console

 

Du kommer tyvärr alltid ha problem med ÅÄÖ på Mac.

 

Om du skulle välja "Java Application" som projekt så måste du skapa en massa kod för att generera menyer, dialoger med mera. XCode ger dig en grund med en del klasser som generar något som kör.

 

Jag ska göra det. Tack så mycket!

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Sternis
Du kommer tyvärr alltid ha problem med ÅÄÖ på Mac.

 

Jo tack, det har jag märkt (fast i C då, men de är ganska likt Java). Nån som har nåt bra förslag på hur man löser problemen med ÅÄÖ?

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
OlaMontan
Jo tack, det har jag märkt (fast i C då, men de är ganska likt Java). Nån som har nåt bra förslag på hur man löser problemen med ÅÄÖ?

Den frågan har ställts i kanske 20 år. Den enkla sanningen är att folk i USA anser att åäö inte existerar.

 

Lösning? Lägg dina texter i en fil i stället för i programmet. Underlättar också internationalisering. Det brukar fungera. Problemet är att Mac ibland använde MacRoman, ibland ISO8859-1 och ibland UTF-8. Man får trixa med de olika formaten i sina textfiler så brukar det lösa sig.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Carlis

Xcode är rätt omständigt till java enligt min mening. Det skapar en väldigt massa underkataloger utan att man bett om det mm men ger föga stöd till användaren. Om du vill ha en ide till java föreslår jag netbeans.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
TalvingKing

Det finns bara en lösning tror jag som kan funka och det är att du skriver så här...

 

Svenska tecken och deras oktalkoder.

 

* å \206

* Å \217

* ä \204

* Ä \216

* ö \224

* Ö \231

 

 

Exempel på användning:

 

printf(”Malm\224″);

 

 

 

hoppas att det hjälper... :crossfingers:

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Elin A
Postad (redigerade)

Ett bra tips brukar vara att använda en vettig teckenuppsättning, t ex Unicode, och att hålla sig till denna. Windows-användare har samma problem med konstiga tecken, men vi tror till skillnad från dem att vi kan skylla det på vårt datorval.

Redigerad av Elin A

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Sternis
Det finns bara en lösning tror jag som kan funka och det är att du skriver så här...

 

Svenska tecken och deras oktalkoder.

 

* å \206

* Å \217

* ä \204

* Ä \216

* ö \224

* Ö \231

Exempel på användning:

 

printf(”Malm\224″);

hoppas att det hjälper... :crossfingers:

 

Tackar för hjälpen, det funkade bra, förutom att jag fick byta oktalkoder. Har fortfarande problem med att få programmet att läsa in och förstå att det är ett konstigt tecken (t.ex. åäö) och göra olika saker beroende på vilket tecken det är. Finns det någon bra lösning på detta? Sitter btw i Java numera.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
f.lonnblad

Man kan tyvärr inte lita på att oktal-koderna är samma på alla platformar, men det funkar ju lokalt.

 

Har också erfarenheten att netbeans(gratis) är smidigare om man inte vill använda en ren text editor som smultron och kompilera i terminalen.

 

Ska man inte göra stora projekt med många paket så är smultron riktigt smidigt

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Sternis

Har upptäckt detta, men jag har fortfarande ett stort problem: Som sagt, hur gör jag för att läsa in konstiga tecken och kunna jämföra dessa i t.ex. en if-sats?

Det borde ju vara att bara skriva såhär, men det funkar aldrig:

//programmet läser in "/" från en dialogruta och sparar detta i variablen in
if (in=="/")
{
//vad som nu händer ifall det funkar
}

Hur bör jag skriva?

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Elin A
Postad (redigerade)
Har upptäckt detta, men jag har fortfarande ett stort problem: Som sagt, hur gör jag för att läsa in konstiga tecken och kunna jämföra dessa i t.ex. en if-sats?

Det borde ju vara att bara skriva såhär, men det funkar aldrig:

//programmet läser in "/" från en dialogruta och sparar detta i variablen in
if (in=="/")
{
//vad som nu händer ifall det funkar
}

Hur bör jag skriva?

 

När man jämför objekt jämför == bara objektens minnesadresser. Din jämförelseoperation jämför alltså minnesadressen för in och minnesadressen för "/", vilket inte kommer att vara samma. Därför ska du använda metoden equals(Object). Det finns också en metod equalsIgnoreCase(String) som du kan använda. equals(Object) finns i Object-klassen och är överskuggad i String för att hantera strängar. När du skapar egna klasser kan det vara bra att komma ihåg att överskugga equals(Object) om du skulle vilja jämföra två objekt med varandra.

if (in.equals ("/"))
{
//vad som nu händer ifall det funkar
}

Redigerad av Elin A

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
f.lonnblad

Operationen "==" fungerar alldeles utmärkt på t.ex. strängar, integers eller flyt-tal.

 

Koden nedan är ett exempel på ett fullt fungerande program i java.

public class test {
public static void main(String[] args) {
	String in = "/";
	if (in == "/") {
		System.out.println("detta funkar" );
	}
}
}

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
f.lonnblad
När man jämför objekt jämför == bara objektens minnesadresser. Din jämförelseoperation jämför alltså minnesadressen för in och minnesadressen för "/", vilket inte kommer att vara samma.

 

Det här är en sanning med modifikation, när det gäller vissa standard typer/klasser så fungerar operationen "==" perfekt, som jag nämner ovan. T.ex. fungerar

int i = 1;
(i == 1); //detta blir sant
double i = 1.0;
(i == 1.0); //detta blir också sant

 

Däremot så ska man använda equals vid jämförelse av objekt, det man måste tänka på är att om man skriver en egen klass, men missar att skriva en egen equals så används en default equals som också jämför minnesadresser.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Elin A
Postad (redigerade)
Operationen "==" fungerar alldeles utmärkt på t.ex. strängar, integers eller flyt-tal.

 

Koden nedan är ett exempel på ett fullt fungerande program i java.

public class test {
public static void main(String[] args) {
	String in = "/";
	if (in == "/") {
		System.out.println("detta funkar" );
	}
}
}

Programmet kommer att skriva ut texten, men det beror inte på att programmet jämför om strängarna har samma värde utan == kommer fortfarande att jämföra strängarnas minnesadresser. I det här fallet kommer Java bara att skapa en instans av "/" och använda den både för in och för "/" i jämförelseoperationen. Med andra ord kommer samma strängobjekt att jämföras med sig själv för att se om den har samma minnesadress, och eftersom det är samma objekt kommer de att ha samma minnesadress och jämförelseoperationen kommer att bli sann.

 

För jämförelse kan du prova samma sak då man läser in strängar under körning. Då kommer in att skapas medan programmet körs och ett nytt objekt skapas även om man skriver in "/". Det objektet har en annan minnesadress än "/" som redan fanns i programmet, jämförelseoperationen blir falsk och texten skrivs inte ut.

import java.util.Scanner;
public class Test
{
public static void main(String[] args)
{
	String in = new Scanner (System.in).nextLine ();
	if (in == "/") {
		System.out.println("detta funkar" );
	}
}
}

Redigerad av Elin A

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
f.lonnblad

Hade för mig att jag hade några program där man läste in strängar från scanner kvar, men uppenbarligen inte.

När vi skrev den typen av inläsning har jag för mig att vi konverterade allt till "integer" och lite annat roligt, kanske blir skillnad då, är dock inte säker. De flesta program vi skrev så använde vi "args" i main(String[] args) när vi skulle skriva till programmet i terminalen.

 

Frågor på datastrukturer eller parallell programmering är jag bättre på.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Sternis

Tack, det funkade bra med equals. Och nu när du säger det så kommer jag på att det stämmer ju med att operationen == bara jämför minnesadresserna.

Dock förstod jag inte riktigt vad du menade med:

När du skapar egna klasser kan det vara bra att komma ihåg att överskugga equals(Object) om du skulle vilja jämföra två objekt med varandra.

 

Är detta nåt jag bör ta hänsyn till? Vad är detta överskuggad och vad innebär det?

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Skapa ett nytt konto på vårt forum. Det är lätt!

Registrera ett nytt konto

Logga in

Redan medlem? Logga in här.

Logga in nu



×
×
  • Skapa nytt...