简体   繁体   中英

Unable to create Runnable JAR file ( Eclipse )

I've made a small game in eclipse but I'm unable to export it. Whenever I try to do so, there are no launch configurations, after quite some time of toying around, I found out how to create one, but now I get the error

"JAR export finished with warnings. See details for additional information. Exported with compile warnings: space/src/space/main.java Jar export finished with problems. See details for additional information. Could not find main method from given launch configuration."

I'm currently using two class files. I've read that it may be because it's not a GUI, but it doesn't use the console and displays in a window, so I'm probably just confused. package space;

import java.awt.Graphics;
public class main extends gameloop{

public void init(){
    setSize(1280,720);  
    Thread th = new Thread(this);
    th.start();
    offscreen = createImage(1280,720);
    d = offscreen.getGraphics();
    addKeyListener(this);
}
public void paint(Graphics g){
d.clearRect(0,0,1280,720);
d.drawImage(voidspace,0,0, this);
d.drawImage(wall,50,0,this);
d.drawImage(floor,100,0,this);



int[][] map=
    {
            {20,27,28,27,28,22},
            {24,11,14,14,17,31},
            {25,12,15,15,18,31},
            {26,13,16,16,19,31},
            {21,29,30,29,30,23}

    };
int rows = 5;
int cols = 6;
int i, j;

for (i = 0; i < rows; i++) {
  for (j = 0; j < cols; j++) {

    if(txtremode == 1){
        if(map[i][j] == 10){
        d.drawImage(voidspace,i*50,j*50,this);
    }
        if(map[i][j] == 11){
        d.drawImage(floor,i*50,j*50,this);
    }
        if(map[i][j] == 12){
            d.drawImage(floor,i*50,j*50,this);
        }
        if(map[i][j] == 13){
            d.drawImage(floor,i*50,j*50,this);
        }
        if(map[i][j] == 14){
            d.drawImage(floor,i*50,j*50,this);
        }
        if(map[i][j] == 15){
            d.drawImage(floor,i*50,j*50,this);
        }
        if(map[i][j] == 16){
            d.drawImage(floor,i*50,j*50,this);
        }
        if(map[i][j] == 17){
            d.drawImage(floor,i*50,j*50,this);
        }
        if(map[i][j] == 18){
            d.drawImage(floor,i*50,j*50,this);
        }
        if(map[i][j] == 19){
            d.drawImage(floor,i*50,j*50,this);
        }
        //corners
        if(map[i][j] == 20){
        d.drawImage(wall,i*50,j*50,this);

    }
        if(map[i][j] == 21){
            d.drawImage(wall,i*50,j*50,this);

        }
        if(map[i][j] == 22){
            d.drawImage(wall,i*50,j*50,this);

        }
        if(map[i][j] == 23){
            d.drawImage(wall,i*50,j*50,this);

        }

        //walls
        if(map[i][j] == 24){
            d.drawImage(wall,i*50,j*50,this);

        }
        if(map[i][j] == 25){
            d.drawImage(wall,i*50,j*50,this);

        }
        if(map[i][j] == 26){
            d.drawImage(wall,i*50,j*50,this);

        }
        if(map[i][j] == 27){
            d.drawImage(wall,i*50,j*50,this);

        }
        if(map[i][j] == 28){
            d.drawImage(wall,i*50,j*50,this);

        }
        if(map[i][j] == 29){
            d.drawImage(wall,i*50,j*50,this);

        }
        if(map[i][j] == 30){
            d.drawImage(wall,i*50,j*50,this);

        }
        if(map[i][j] == 31){
            d.drawImage(wall,i*50,j*50,this);

        }


    }



    //easteregg
    if(txtremode == 112109100){

        if(map[i][j] == 10){
        d.drawImage(voidspace,i*50,j*50,this);
        }

        //pmd-based floors(1-9)
        if(map[i][j] == 11){
        d.drawImage(pmdtlf,i*50,j*50,this);
        }
        if(map[i][j] == 12){
            d.drawImage(pmdtmf,i*50,j*50,this);
            }
        if(map[i][j] == 13){
            d.drawImage(pmdtrf,i*50,j*50,this);
            }
        if(map[i][j] == 14){
            d.drawImage(pmdmlf,i*50,j*50,this);
            }
        if(map[i][j] == 15){
            d.drawImage(pmdflr_base,i*50,j*50,this);
            }
        if(map[i][j] == 16){
            d.drawImage(pmdmrf,i*50,j*50,this);
            }
        if(map[i][j] == 17){
            d.drawImage(pmdblf,i*50,j*50,this);
            }
        if(map[i][j] == 18){
            d.drawImage(pmdbmf,i*50,j*50,this);
            }
        if(map[i][j] == 19){
            d.drawImage(pmdbrf,i*50,j*50,this);
            }

        //pmd-based corners
        if(map[i][j] == 20){
        d.drawImage(pmdtlc,i*50,j*50,this);
        }
        if(map[i][j] == 21){
            d.drawImage(pmdtrc,i*50,j*50,this);
            }
        if(map[i][j] == 22){
            d.drawImage(pmdblc,i*50,j*50,this);
            }
        if(map[i][j] == 23){
            d.drawImage(pmdbrc,i*50,j*50,this);
            }

        //pmd-based walls
        if(map[i][j] == 24){
            d.drawImage(pmdtw1,i*50,j*50,this);
            }
        if(map[i][j] == 25){
            d.drawImage(pmdtw2,i*50,j*50,this);
            }
        if(map[i][j] == 26){
            d.drawImage(pmdtw3,i*50,j*50,this);
            }
        if(map[i][j] == 27){
            d.drawImage(pmdlw1,i*50,j*50,this);
            }
        if(map[i][j] == 28){
            d.drawImage(pmdlw2,i*50,j*50,this);
            }
        if(map[i][j] == 29){
            d.drawImage(pmdrw1,i*50,j*50,this);
            }
        if(map[i][j] == 30){
            d.drawImage(pmdrw2,i*50,j*50,this);
        }
        if(map[i][j] == 31){
            d.drawImage(pmdbw1,i*50,j*50,this);
            }

    }
  }
}


g.drawImage(offscreen,0,0,this );

}
public void update(Graphics g){
paint (g);
}
}

Next consists mostly of a loop, but I haven't implemented that yet.

package space;

import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

@SuppressWarnings("serial")
public class gameloop extends Applet implements Runnable, KeyListener{

    public int x,y,windowx,windowy,txtremode;
    public Image offscreen; 
    public Graphics d;
    public boolean up, down, left, right;
    public BufferedImage closed_door,floor,open_door,voidspace,wall; //default
    public BufferedImage pmdtiles,pmdtlc,pmdtrc,pmdblc,pmdbrc; //pmd-based wall corners
    public BufferedImage pmdtw1,pmdtw2,pmdtw3,pmdlw1,pmdlw2,pmdrw1,pmdrw2,pmdbw1;//pmd-based walls (w/ varients)
    public BufferedImage pmdtlf,pmdtmf,pmdtrf,pmdmlf,pmdflr_base,pmdmrf,pmdblf,pmdbmf,pmdbrf; //pmd-based floor(1-9)
    public int counter;
    public double counter2 = 0;
    public String score2 = "";
    public void run() {
        try {
        wall = ImageIO.read(new File("wall.png"));
        floor = ImageIO.read(new File("floor.png"));
        closed_door = ImageIO.read(new File("closed_door.png"));
        open_door = ImageIO.read(new File("open_door.png"));
        voidspace = ImageIO.read(new File("void.png"));
        pmdtiles = ImageIO.read(new File("pmdtiles.png"));

        //pmd-based wall corners
        pmdtlc = pmdtiles.getSubimage(5, 5, 50, 50);
        pmdtrc = pmdtiles.getSubimage(225, 5, 50, 50);
        pmdblc = pmdtiles.getSubimage(5, 170, 50, 50);
        pmdbrc = pmdtiles.getSubimage(225, 170, 50, 50);

        //pmd-based walls(w/varients)
        pmdtw1 = pmdtiles.getSubimage(60, 5, 50, 50);
        pmdtw2 = pmdtiles.getSubimage(115, 5, 50, 50);
        pmdtw3 = pmdtiles.getSubimage(170, 5, 50, 50);
        pmdlw1 = pmdtiles.getSubimage(5, 60, 50, 50);
        pmdlw2 = pmdtiles.getSubimage(5, 115, 50, 50);
        pmdrw1 = pmdtiles.getSubimage(225, 60, 50, 50);
        pmdrw2 = pmdtiles.getSubimage(225, 115, 50, 50);
        pmdbw1 = pmdtiles.getSubimage(170, 170, 50, 50);


        //pmd-based floors(1-9)

        pmdtlf = pmdtiles.getSubimage(289, 5, 50, 50);
        pmdtmf = pmdtiles.getSubimage(344, 5, 50, 50);
        pmdtrf = pmdtiles.getSubimage(399, 5, 50, 50);
        pmdmlf = pmdtiles.getSubimage(289, 60, 50, 50);
        pmdflr_base = pmdtiles.getSubimage(60, 60, 50, 50);
        pmdmrf = pmdtiles.getSubimage(399, 60, 50, 50);
        pmdblf = pmdtiles.getSubimage(289, 115, 50, 50);
        pmdbmf = pmdtiles.getSubimage(344, 115, 50, 50);
        pmdbrf = pmdtiles.getSubimage(399, 115, 50, 50);


        txtremode = 112109100;





    }

        catch (IOException el) {
        el.printStackTrace();
    }
        while(true){


            repaint();
        try {
            Thread.sleep(20);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        }
    }

    public void keyPressed(KeyEvent e) {
        if(e.getKeyCode() ==37){
            left = true;
        }
        if(e.getKeyCode() ==38){
            up = true;
        }
        if(e.getKeyCode() ==39){
            right = true;
        }
        if(e.getKeyCode() ==40){
            down = true;
        }
         }
    public void keyReleased(KeyEvent e) {
        if(e.getKeyCode() == 37){
            left = false;
        }
        if(e.getKeyCode() == 38){
            up = false;
            counter2 = 4;
        }
        if(e.getKeyCode() == 39){
            right = false;
        }
        if(e.getKeyCode() == 40){
            down = false;

    }
}
public void keyTyped(KeyEvent e) {
}
}

In your case, you don't need main method as you are working with applet.

What you can try is to do following:

  1. either remove package "space" from gameloop or add it to main class
  2. compile the code

    javac gameloop.java javac -cp . main.java

  3. run the code as applet

    appletviewer main.class

  4. make sure to have all files in place (wall.png, floor.png, etc.)

  5. If you want to be able to run main.java via java command, you will need to add public static void main(String [] arg) into it and make sure to create main object and call it's init method.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM