Meddelande

Minska
No announcement yet.

Exception in thread "main" java.lang.StackOverflowError

Minska
X
  • Filter
  • Klockan
  • Show
Clear All
new posts

  • Exception in thread "main" java.lang.StackOverflowError

    Hej!

    Jag är helt ny här och även väldigt ny när det kommer till programmering. Jag har arbetat lite i Flash men arbetar nu i Java i och med att jag läser programmering B. Jag har råkat ut för ett problem. Av någon anledning dyker denna text upp när jag ska köra programmet.
    Exception in thread "main" java.lang.StackOverflowError
    Vad betyder det?

  • #2
    Det betyder nog att programmet har använt för mycket stack-minne.

    Om du visar koden så kan vi nog peka ut vad det beror på också.

    Kommentera


    • #3
      Jag har väldigt många klasser, ska jag visa alla?

      Kommentera


      • #4
        [kod]//main klass
        package craps;
        import java.util.*;

        public class Craps {
        public static void main(String[] args){
        Scanner intreader=new Scanner(System.in);
        Scanner stringreader=new Scanner(System.in);
        player[] players=new player[30];
        LinkedList listOfPlayers=new LinkedList();
        playerlist pList=new playerlist();
        game Game=new game();
        int choice=0;
        boolean playing=true;
        boolean game=true;
        boolean menu=true;

        pList.loadPlayers(listOfPlayers);
        while(game){

        while(menu){
        System.out.println("Meny");
        System.out.println("1. Skapa en ny spelare");
        System.out.println("2. Ta bort en spelare");
        System.out.println("3. Spela");
        System.out.println("4. Regler");
        System.out.println("5. Highscore");
        System.out.println("6. Avsluta");
        choice=intreader.nextInt();
        System.out.println("");
        playing=true;
        menu=false;
        }

        switch(choice){
        case 1:
        pList.addPlayer(listOfPlayers);
        System.out.println("Du har nu registrerat dig.");
        System.out.println("");
        menu=true;
        break;
        case 2:
        pList.deletePlayers(listOfPlayers);
        System.out.println("");
        menu=true;
        break;
        case 3:
        if(listOfPlayers.size()!=0){
        pList.choosePlayer(listOfPlayers);
        }
        if(listOfPlayers.size()==0){
        System.out.println("Det finns inga spelare. Du måste registrera dig först.");
        System.out.println("");
        menu=true;
        }
        break;
        case 4:

        break;
        case 5:
        pList.highscore(listOfPlayers);
        System.out.println("Highscore:");
        pList.write(listOfPlayers);
        System.out.println("");
        menu=true;
        break;
        case 6:
        pList.savePlayers(listOfPlayers);
        System.out.println("Hej då!");
        game=false;
        break;
        default:
        System.out.println("Det där valet finns inte. Välj genom att skriva alternativets siffra.");
        menu=true;
        break;
        }
        }
        }
        }

        //player klass
        package craps;

        public class player {
        private String name;
        int money;

        public player(String n, int m){
        name=n;
        money=m;
        }

        public String getName(){
        return name;
        }

        public int getMoney(){
        return money;
        }

        public String toString(){
        return(name+ " har " + money + ":-");
        }

        }
        //klassen playerlist
        package craps;
        import java.io.*;
        import java.util.*;

        public class playerlist {
        Scanner intreader=new Scanner(System.in);
        Scanner stringreader=new Scanner(System.in);
        game Game=new game();
        public int playerNumber;

        public void addPlayer(LinkedList list){
        System.out.println("Vad heter du?");
        String name=stringreader.next();
        int money=100;
        player temp=new player(name, money);
        list.add(temp);
        }

        public void playerNow(LinkedList list){
        player temp =(player)list.get(playerNumber);
        System.out.println(temp.getName());
        }

        public void moneyNow(LinkedList list){
        player temp=(player)list.get(playerNumber);
        System.out.println(temp.getMoney());
        }

        public void savePlayers(LinkedList list){
        try{
        FileWriter fw=new FileWriter("spelare.txt");
        BufferedWriter bw=new BufferedWriter(fw);
        PrintWriter utFil=new PrintWriter (bw);
        for (int i = 0; i < list.size(); i++) {
        player temp=(player)list.get(i) ;
        String name=temp.getName();
        int money=temp.getMoney();
        utFil.println(name + "\t" + money);
        }
        utFil.close();
        System. out.println("Spelet har sparats");
        }
        catch(IOException e){
        System.out.println("Sparningen misslyckades");
        }
        }

        public void deletePlayers(LinkedList list){
        System.out.println("Vilken användare vill du ta bort?");
        String name=stringreader.next();
        boolean saknas=true;
        for(int i=0; i<list.size()&&amp;amp;saknas; i++){
        player temp=(player)list.get(i);
        if(temp.getName().equalsIgnoreCase(name)){
        System.out.println("Är du säker på att du vill ta bort "+name+"?");
        String answer=stringreader.next();
        if(answer.equalsIgnoreCase("ja")){
        list.remove(i);
        System.out.println(name+" borttagen.");
        saknas=false;
        }
        else if(answer.equalsIgnoreCase("nej")){
        System.out.println("Du ville inte radera "+name+
        ". Du blir nu skickad tillbaka till menyn.");
        saknas=false;
        }else{
        System.out.println("Du måste svara ja eller nej.");
        System.out.println("Försök igen.");
        saknas=false;
        }
        }
        }
        if(saknas){
        System.out.println("Namnet finns ej.");
        }
        }

        public void loadPlayers(LinkedList list){
        try{
        FileReader fr=new FileReader("spelare.txt");
        BufferedReader inFil=new BufferedReader(fr);
        String rad=inFil.readLine();
        list.clear();
        while(rad!=null){
        StringTokenizer tokenizer=new StringTokenizer(rad, "\t");
        String name=tokenizer.nextToken();
        String moneyString=tokenizer.nextToken();
        int money=Integer.parseInt(moneyString);
        player temp=new player(name, money);
        list.add(temp);
        rad=inFil.readLine();
        }
        inFil.close();
        System.out.println("Hämtningen av spelare lyckades.");
        }
        catch(IOException e){
        System.out.println("Hämntingen av spelare misslyckades");
        }
        }

        public void choosePlayer(LinkedList list){
        boolean saknas=true;
        if(list.size()!=0){
        System.out.println("Vem vill du spela med?");
        String name=stringreader.next();
        for (int i=0; i<list.size() && saknas; i++){
        player temp =(player)list.get(i) ;
        if (temp.getName().equalsIgnoreCase(name)){
        String myName=temp.getName();
        int myMoney=temp.getMoney();
        playerNumber=i;
        System.out.println("Du spelar nu med "+ myName + " och har " + myMoney + ":-");
        Game.play();
        saknas = false;
        }
        }
        if(saknas){
        System.out.println( "Namnet, finns ej. " ) ;
        }
        }
        }

        public void write(LinkedList list){
        for(int i=0; i<list.size(); i++){
        player temp=(player)list.get(i);
        int j=i+1;
        System.out.println(j+". "+temp);
        }
        if(list.size()==0){
        System.out.println("Inga spelare är registrerade.");
        }
        }

        public void highscore(LinkedList list){
        for(int i=0; i<list.size()-1; i++){
        for(int j=i+1; j<list.size(); j++){
        player temp =(player)list.get(i);
        player temp2=(player)list.get(j);
        if(temp.money<temp2.money){
        int temp3=temp.money;
        temp.money=temp2.money;
        temp2.money=temp3;
        }
        }

        }
        }

        }
        //klassen game
        package craps;

        public class game {
        dice d=new dice();
        bet bets=new bet();
        boolean playing=true;

        public void play(){
        while(playing){
        bets.passLineBet();
        System.out.println(d.sum);
        }
        }

        }
        //klassen dice
        package craps;
        import java.util.*;

        public class dice {
        Random dice1=new Random();
        Random dice2=new Random();
        int diceNumber1=dice1.nextInt(6)+1;
        int diceNumber2=dice2.nextInt(6)+1;
        public int sum;

        public void roll(){
        sum=diceNumber1+diceNumber2;
        }

        }
        //klass bet
        package craps;
        import java.util.*;

        public class bet {
        LinkedList listOfPlayers=new LinkedList();
        Scanner intreader=new Scanner(System.in);
        playerlist pList=new playerlist();//när jag stänger av denna så kmr inte meddelandet upp
        boolean money=true;
        int bet1;

        public void passLineBet(){
        money=true;

        while(money){
        System.out.println("Du har ");
        pList.moneyNow(listOfPlayers);
        System.out.println(":-. Hur stort ska ditt passLineBet vara?");
        bet1=intreader.nextInt();
        /*if(bet1>now.playerNow.elementAt(1)()){
        System.out.println("Du har inte så mycket pengar.");
        }else{
        money=false;
        }*/
        }
        }
        }[/kod]
        Last edited by @nders; 2011-12-21, 10:01. Anledning: [kod]-taggar ftw

        Kommentera


        • #5
          StackOverflowError betyder i regel att du har en funktion som anropar sig själv "oändligt" många gånger, eller åtminstone tills du får det felet. Jag tänker inte analysera din kod och lista ut var felet händer, men nu vet du vad du ska leta efter. Felmeddelandet bör säga vilken rad felet händer på, för övrigt...
          Gameboy Genius - Foto: Gatukonst och elektronikporr
          Internklippning:
          1) Snaggning av fångar.
          2) Klippning frisörer emellan.

          Kommentera


          • #6
            Jag ser ju vilken rad som e fel. Men förstår inte varför, varför skulle den anropa sig oändligt många gånger?

            Kommentera

            Working...
            X