Erstes Programm - Problem beim Ausführen als jar

Alph0r

Mitglied
Ist das erste Topic, dass ich hier eröffne, also hallo erstmal 🙂

Ich habe ein kleines Programm geschrieben, dass mir den Erwartungswert einer ebstimmten Situation beim Pokern ausrechnet. Der User soll dabei Eingaben über die Konsole machen und eine Ausgabe auf der Konsole sehen.

Wenn ich das ganze in Eclipse laufen lasse, gibt es keine Probleme. Wenn ich es als jar verpacke, passiert bei einem Doppelklich einfach garnichts. Hier mal der Source Code:

Code:
package Alles;


public class RiverEVProgramm {
public static void main(String[] args) {
	InputOutput.willkommen();
	InputOutput.potMethode();
	InputOutput.callVorneMethode();
	InputOutput.callHintenMethode();
	InputOutput.valueCRMethode();
	InputOutput.gtoFrage();
	InputOutput.gtoEintscheidungsMethode();
	if(Berechnung.getGTOBoolean()){
		Berechnung.gtoBluffCombos(Berechnung.getPot(), Berechnung.getValueCR());
	}
	else{
		InputOutput.bluffCRMethode();
	}
	Berechnung.evBFMethode(Berechnung.getPot(), Berechnung.getValueCR(), Berechnung.getBluffCR(), Berechnung.getCallVorne(), Berechnung.getCallHinten());
	Berechnung.evBCMethode(Berechnung.getPot(), Berechnung.getValueCR(), Berechnung.getBluffCR(), Berechnung.getCallVorne(), Berechnung.getCallHinten());
	System.out.println("Der Erwartungswert eines B/F entspricht ungefähr " + Berechnung.getEvBF()+ "BB pro Hand");
	System.out.println("Der Erwartungswert eines B/C entspricht ungefähr " + Berechnung.getEvBC()+"BB pro Hand");
	
	while(true){
		int i=3;
		System.out.println(i);
	}
	}

}

Code:
package Alles;

import java.io.*;

public class InputOutput {
//Erste Message im Programm
	public static void willkommen() {
		System.out
				.println("Willkommen bei RiverEV!\ndieses Programm berechnet den Erwartungswert einer Value-Bet");
	}
// Frage ob GTO Bluff-Frequenz benutzt wrden soll
	public static void gtoFrage(){
		System.out.print("Möchten sie eine balancierte Bluff-Frequenz für ihren Gegner annehmen?\nSchreiben sie bitte: \"Ja\" bzw. \"nein\":");
	}
// Methode, die Usereingaben einliest und den GTO Frequenz boolean setzt
	public static void gtoEintscheidungsMethode() {
		BufferedReader gtoReader = new BufferedReader(new InputStreamReader(
				System.in));
		String gtoEntscheidung = null;
		try {
			gtoEntscheidung = gtoReader.readLine();
		} catch (IOException ioe) {
			System.out.println("Fehler bei der Eingabe!");
			System.exit(1);
		}

		if (gtoEntscheidung.equals("ja") || gtoEntscheidung.equals("JA")
				|| gtoEntscheidung.equals("Ja") || gtoEntscheidung.equals("jA")) {
			Berechnung.setGTOBoolean(true);
			System.out.println("Sie haben sich dafür entschieden ihrem Gegner automatisch eine balancierte Bluff-Frequenz zu geben!");
		} else if (gtoEntscheidung.equals("nein")
				|| gtoEntscheidung.equals("NEIN")
				|| gtoEntscheidung.equals("Nein")) {
			Berechnung.setGTOBoolean(false);
			System.out
					.println("Sie haben sich dagegen entschieden, ihrem Gegner eine balancierte Bluff-Frequenz zu geben.\nSie können die Kombinationen seiner Bluff-Hände nun manuell bestimmen!");
		} else {
			System.out.print("Ungültige Eingabe, bitte Eingabe wiederholen: ");
			gtoEintscheidungsMethode();

		}

	}
	// Methode zum Setzen der Potgröße
	public static void potMethode(){
		System.out.print("Geben Sie Bitte die Potgröße vor ihrer Bet in BB an:");
		BufferedReader potReader = new BufferedReader(new InputStreamReader(
				System.in));
		int pot =0;
		String potSTR=null;
		try {
			potSTR = potReader.readLine();
		} catch (IOException ioe) {
			System.out.println("Fehler bei der Eingabe!");
			System.exit(1);}
		try {
			pot = Integer.parseInt(potSTR);
		} catch (Exception e) {
			System.out.println("Bitte geben sie eine Zahl ein!");
			potMethode();
		}
		if (pot<0){
			System.out.println("Bitte geben Sie eine positive Zahl ein");
			potMethode();
		}
		else
		Berechnung.setPot(pot);
		}
	//Methode zur bestimmung der CC RAnge, gegen die wir vorne sind
	public static void callVorneMethode(){
		System.out.print("Geben Sie Bitte die Handkombinationen der Gegnerischen Calling-Range ein, gegen die Sie vorne sind:");
		BufferedReader potReader = new BufferedReader(new InputStreamReader(
				System.in));
		int callVorne =0;
		String callVorneSTR=null;
		try {
			callVorneSTR = potReader.readLine();
		} catch (IOException ioe) {
			System.out.println("Fehler bei der Eingabe!");
			System.exit(1);}
		try {
			callVorne = Integer.parseInt(callVorneSTR);
		} catch (Exception e) {
			System.out.println("Bitte geben sie eine Zahl ein!");
			callVorneMethode();
		}
		if (callVorne<0){
			System.out.println("Bitte geben Sie eine positive Zahl ein");
			callVorneMethode();
		}
		else
		Berechnung.setCallVorne(callVorne);
		}
	//Methode zur bestimmung der CC RAnge, gegen die wir hinten sind
		public static void callHintenMethode(){
		System.out.print("Geben Sie Bitte die Handkombinationen der Gegnerischen Calling-Range ein, gegen die Sie hinten sind:");
		BufferedReader potReader = new BufferedReader(new InputStreamReader(
				System.in));
		int callHinten =0;
		String callHintenSTR=null;
		try {
			callHintenSTR = potReader.readLine();
		} catch (IOException ioe) {
			System.out.println("Fehler bei der Eingabe!");
			System.exit(1);}
		try {
			callHinten = Integer.parseInt(callHintenSTR);
		} catch (Exception e) {
			System.out.println("Bitte geben sie eine Zahl ein!");
			callHintenMethode();
		}
		if (callHinten<0){
			System.out.println("Bitte geben Sie eine positive Zahl ein");
			callHintenMethode();
		}
		else
		Berechnung.setCallHinten(callHinten);
		}
		//Methode zur bestimmung der C/R Combos, gegen die wir hinten sind
		public static void valueCRMethode(){
			System.out.print("Geben Sie Bitte die Handkombinationen der Gegnerischen Value-C/R Range ein:");
			BufferedReader potReader = new BufferedReader(new InputStreamReader(
					System.in));
			int valueCR =0;
			String valueCRSTR=null;
			try {
				valueCRSTR = potReader.readLine();
			} catch (IOException ioe) {
				System.out.println("Fehler bei der Eingabe!");
				System.exit(1);}
			try {
				valueCR = Integer.parseInt(valueCRSTR);
			} catch (Exception e) {
				System.out.println("Bitte geben sie eine Zahl ein!");
				valueCRMethode();
			}
			if (valueCR<0){
				System.out.println("Bitte geben Sie eine positive Zahl ein");
				valueCRMethode();
			}
			else
			Berechnung.setValueCR(valueCR);
			}
	
		//Methode zur manuellen Eingabe der Bluff CR Combos. Eine Methode zum Berechnen der GTO Bluff Combos befindet sich in der Berechnung Klasse
		public static void bluffCRMethode(){
			System.out.print("Geben Sie Bitte die Handkombinationen der Gegnerischen Bluff-C/R Range ein:");
			BufferedReader potReader = new BufferedReader(new InputStreamReader(
					System.in));
			int bluffCR =0;
			String bluffCRSTR=null;
			try {
				bluffCRSTR = potReader.readLine();
			} catch (IOException ioe) {
				System.out.println("Fehler bei der Eingabe!");
				System.exit(1);}
			try {
				bluffCR = Integer.parseInt(bluffCRSTR);
			} catch (Exception e) {
				System.out.println("Bitte geben sie eine Zahl ein!");
				bluffCRMethode();
			}
			if (bluffCR<0){
				System.out.println("Bitte geben Sie eine positive Zahl ein");
				bluffCRMethode();
			}
			else
			Berechnung.setBluffCR(bluffCR);
			}
}

Code:
package Alles;

public class Berechnung {
	
	private static double bluffCR=0;  //ANzahl der Bluff CR Combos
	private static double valueCR=0;  //Anzahl der Value CR Combos, jede besser als unsere Hand
	private static double callVorne=0;  //Anzahl Call Combos, gegen die wir vorne sind
	private static double callHinten=0;  //Anzahl Call Combos gegen die wir hinten sind
	private static double pot=0;  //Potgröße vor der Bet
	private static double evBF=0;  // EX SD EV des B/F
	private static double evBC=0;  // EX SD EV des B/C
	private static boolean gtoBoolean=false; //Boolean, ob die GTO Bluffing Frequenz gewählt wurde
	
	
	//setter und getter
	public static void setBluffCR(double bluffCR){
		Berechnung.bluffCR=(double)bluffCR;
	}
	public static double getBluffCR(){
		return Berechnung.bluffCR;
	}
	
	public static void setValueCR(int valueCR){
		Berechnung.valueCR = (double)valueCR;
	}
	public static double getValueCR(){
		return Berechnung.valueCR;
	}
	public static void setCallVorne(int callVorne){
		Berechnung.callVorne=callVorne;
	}
	public static double getCallVorne(){
		return Berechnung.callVorne;
	}
	public static void setCallHinten(int callHinten){
		Berechnung.callHinten=callHinten;
	}
	public static double getCallHinten(){
		return Berechnung.callHinten;
	}
	public static void setPot(int pot){
		Berechnung.pot=pot;
	}
	public static double getPot(){
		return Berechnung.pot;
	}
	public static void setGTOBoolean(boolean gtoBoolean){
		Berechnung.gtoBoolean = gtoBoolean;
	}
	public static boolean getGTOBoolean(){
		return Berechnung.gtoBoolean;
	}
	
	public static double getEvBF() {
		return evBF;
	}
	public static void setEvBF(double evBF) {
		Berechnung.evBF = evBF;
	}
	public static double getEvBC() {
		return evBC;
	}
	public static void setEvBC(double evBC) {
		Berechnung.evBC = evBC;
	}
	public static void gtoBluffCombos(double pot, double valueCR){
		double bluffCR=0;
		bluffCR=(valueCR/(pot+4));
		Berechnung.setBluffCR(bluffCR);
	}
	
	
	
	
	
	public static void evBFMethode(double pot, double valueCR, double bluffCR, double callVorne, double callHinten){
		double evBF=0;
		double combos=(valueCR+bluffCR+callVorne+callHinten);
		evBF=(bluffCR/combos)*(-1)*(pot+1)+(valueCR/combos)*(-1)+(callVorne/combos)+(callHinten/combos)*(-1);
		setEvBF(evBF);
	}
	public static void evBCMethode(double pot, double valueCR, double bluffCR, double callVorne, double callHinten){
		double evBC=0;
		double combos=(valueCR+bluffCR+callVorne+callHinten);
		evBC=(bluffCR/combos)*(2)+(valueCR/combos)*(-2)+(callVorne/combos)+(callHinten/combos)*(-1);
		setEvBC(evBC);
	}
	}

In der Jar befindet sich ein package, in dem alle Klassen sind.

Das Manifest:

Manifest-Version: 1.0
Main-Class: Alles.RiverEVProgramm

Woran könnte das Problem liegen?
 
Was ist denn die Fehlermeldung? Probiere es doch auch mal auf der Konsole

Code:
java -jar lala.jar
 
Danke schonmal, den Befehl kannte ich bisher nicht. Wenn ich das Jar per Konsole öffne, funktioniert das ganze.

Woran könnte es liegen, dass es nicht per Doppelklick auf die Jar geht?

Nochmal edit: Hab jetzt gelesen, dass man Programme ohne GUI generell nicht über einen Klick auf die Jar öffnen kann, das würde es erklären, wenn es stimmt.
 
Zuletzt bearbeitet:
Deine Klasse heißt nicht
Code:
riverevprogramm
sondern
Code:
Alles.riverevprogramm
.
Wechsel ins verzeichnis bin und führe
Code:
java Alles.riverevprogramm
aus.
Evtl. fehlt dann noch ne classpath angabe wo er die klassen findet.

EDIT:
durch den edit oben sinnlos
 

Zurück
Oben