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

Java program i Xcode och Terminal


mykk

Rekommendera Poster

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

Länk till kommentar
Dela på andra webbplatser

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...

Länk till kommentar
Dela på andra webbplatser

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.

Länk till kommentar
Dela på andra webbplatser

...

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 ?)

Länk till kommentar
Dela på andra webbplatser

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.

Länk till kommentar
Dela på andra webbplatser

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?

Länk till kommentar
Dela på andra webbplatser

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

Länk till kommentar
Dela på andra webbplatser

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.

Länk till kommentar
Dela på andra webbplatser

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.

Länk till kommentar
Dela på andra webbplatser

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!

Länk till kommentar
Dela på andra webbplatser

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 ÅÄÖ?

Länk till kommentar
Dela på andra webbplatser

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.

Länk till kommentar
Dela på andra webbplatser

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.

Länk till kommentar
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:

Länk till kommentar
Dela på andra webbplatser

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.

Länk till kommentar
Dela på andra webbplatser

  • 4 weeks later...
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.

Länk till kommentar
Dela på andra webbplatser

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

Länk till kommentar
Dela på andra webbplatser

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?

Länk till kommentar
Dela på andra webbplatser

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
}

Länk till kommentar
Dela på andra webbplatser

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" );
	}
}
}

Länk till kommentar
Dela på andra webbplatser

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.

Länk till kommentar
Dela på andra webbplatser

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" );
	}
}
}

Länk till kommentar
Dela på andra webbplatser

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å.

Länk till kommentar
Dela på andra webbplatser

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?

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.



×
×
  • Skapa nytt...