2017-09-17 13 views
-1

私は最後の数日間、成功しなかった多くの方法を試しました...私は様々なStackoverflowのエントリーを無駄にしてしまいました。.jarに変換したときにプログラムが実行されない

私は3つの異なるIDEを試しました... IntelliJ、Eclispe、Netbeans。

問題は、プログラムを実行可能なjarに変換しようとしたときに(ダブルクリックまたはコマンド実行による)実行できない場合です。

コマンドで次のコマンドを実行:私が得る\コンピュー\プログラミング\ Javaの\プロジェクト\ JavaFXGameMenu \アーティファクト\うちJavaFXGameMenu_jar \ JavaFXGameMenu.jar \

を-jar D

のjavaエラー:メインクラスのルートを見つけることができませんでした。メイン

javaw代わりに私は同じメッセージを実行しますが、エラーメッセージは表示されませんが、何も起こりません。

私は主に、私が構築しているJavaFXアプリケーションとしてIntelliJを使用しています。

これは、プロジェクト階層である:私は、その後使用して、これを再実行

enter image description here

JavaのD -jar私は他のスレッドに基づいて、以下を選択アーティファクトを作成する場合 enter image description here

:¥Computing¥Executables¥JavaFXGameMenu.jar

次の問題が発生します。

enter image description here

私は私のシステムとパスに関連する環境変数を入れていると私はjre1.8.0_144を使用しています。

問題は何ができるか追跡するとすべてのヘルプは大

以下のコードを高く評価している...しかし、これは完全にコンパイルし、エラーなしでIDE内で実行される...そのはの.jarになったときに問題があると命令から走った。

package root; 

import javafx.application.Application; 

import javafx.application.Platform; 
import javafx.event.ActionEvent; 
import javafx.event.EventHandler; 
import javafx.geometry.Pos; 
import javafx.scene.Parent; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.CheckBox; 
import javafx.scene.control.Label; 
import javafx.scene.effect.DropShadow; 
import javafx.scene.image.Image; 
import javafx.scene.image.ImageView; 
import javafx.scene.layout.Pane; 
import javafx.scene.layout.StackPane; 
import javafx.scene.layout.VBox; 
import javafx.scene.paint.Color; 
import javafx.scene.paint.CycleMethod; 
import javafx.scene.paint.LinearGradient; 
import javafx.scene.paint.Stop; 
import javafx.scene.shape.Line; 
import javafx.scene.shape.Rectangle; 
import javafx.scene.text.Font; 
import javafx.scene.text.FontWeight; 
import javafx.scene.text.Text; 
import javafx.stage.Screen; 
import javafx.stage.Stage; 
import javafx.stage.StageStyle; 
import javafx.stage.Window; 

import java.io.IOException; 
import java.io.InputStream; 
import java.nio.file.Files; 
import java.nio.file.Paths; 


public class Main extends Application { 

    private double width = 1920; 
    private double height = 1080; 

    private Parent createContent(){ 
     Pane root = new Pane(); 
     root.setPrefSize(width, height); //W:860 H:600 
     ImageView imgLogo = null; 
     ImageView bottomlogo = null; 
     MenuItem newGame = new MenuItem("NEW GAME"); 
     MenuItem continueGame = new MenuItem("CONTINUE"); 
     MenuItem friends = new MenuItem("FRIENDS"); 
     MenuItem settings = new MenuItem("SETTINGS"); 
     MenuItem store = new MenuItem("STORE"); 
     MenuItem exit = new MenuItem("EXIT"); 

     try(InputStream is = Files.newInputStream(Paths.get("src/resources/Images/dark.jpg"))) { 
      ImageView img = new ImageView(new Image(is)); 
      img.setFitWidth(width); 
      img.setFitHeight(height); 
      root.getChildren().add(img); 
     } catch (IOException e){ 
      System.out.println("Couldn't Load Image"); 
     } 

     try(InputStream is = Files.newInputStream(Paths.get("src/resources/Images/logo.png"))) { 
      imgLogo = new ImageView(new Image(is)); 
      imgLogo.setX(1000); 
      imgLogo.setY(100); 
      imgLogo.setFitWidth(600); 
      imgLogo.setFitHeight(300); 
     } catch (IOException e){ 
      System.out.println("Couldn't Load Image"); 
     } 

     try(InputStream is = Files.newInputStream(Paths.get("src/resources/Images/SteamAgony.png"))) { 
      bottomlogo = new ImageView(new Image(is)); 
      bottomlogo.setX(100); 
      bottomlogo.setY(800); 
      bottomlogo.setFitHeight(200); 
      bottomlogo.setFitWidth(200); 
      bottomlogo.setOpacity(0.7); 
     } catch (IOException e){ 
      System.out.println("Couldn't Load Image"); 
     } 

     MenuBox menu = new MenuBox(
       newGame, 
       continueGame, 
       friends, 
       settings, 
       store, 
       exit); 

     menu.setTranslateX(width/3.4); 
     menu.setTranslateY(height/2.5); 

     settings.setOnMouseClicked(event -> new SceneCreator().createScene(200,300)); 

     exit.setOnMouseClicked(event -> Platform.exit()); 

     root.getChildren().addAll(menu, imgLogo, bottomlogo); 

     return root; 
    } 

    @Override 
    public void start(Stage primaryStage) throws Exception{ 
     Scene scene = new Scene(createContent()); 
     primaryStage.setScene(scene); 
     primaryStage.initStyle(StageStyle.UNDECORATED); 
     primaryStage.show(); 
    } 

    @Override 
    public void stop(){ 
     //TODO 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 
+0

「メインクラスが見つかりませんでした」とはどういう意味ですか?(https://stackoverflow.com/questions/18093928/what-does-could-not-find-or-load-main-クラス平均) – Ravi

+0

ヌル要素を追加するコードを含めることができます – jrtapsell

+0

@Raviは、その回答の重複の近くにはありません。これは私が試したスレッドの1つで、同じ問題が発生します。 – ArcherGilly

答えて

0

問題はinputStreamsの宣言にまで及んでいませんでした。

これは、IDE内とjarから実行しているの両方で動作します:私は前に持っていたものと比較すると

String bgImg = "root/resources/dark.jpg"; 
    URL bgImgPath = Main.class.getClassLoader().getResource(bgImg); 
    ImageView img = new ImageView(new Image(bgImgPath.toExternalForm())); 
    img.setFitWidth(width); 
    img.setFitHeight(height); 
    root.getChildren().add(img); 

try(InputStream is = Files.newInputStream(Paths.get("src/resources/Images/dark.jpg"))){ 
    ImageView img = new ImageView(new Image(is)); 
    img.setFitWidth(width); 
    img.setFitHeight(height); 
    root.getChildren().add(img); 
}catch (IOException e) { 
    System.out.println("Could not load"); 
} 

パスへの変更、私はリソースを追加しようとしたところからのものでしたsrcの代わりにルートフォルダに移動します。

0

エラーが(私はJavaFXのと、本当に慣れていないよ)たぶん、あなたは、子ノードを初期化するのを忘れMain.createContentライン102です。

0

null要素をペインの子として追加すると、直面しているヌルポインタの問題が発生します。デバッガを使用すると、nullに設定しない変数が設定されている場所を見つけることができますnullにする

編集 - コードが

を追加した後は、tryキャッチ(imageLogo、bottomLogo)での2つのフィールドを見ていると、エラーの原因となって、ヌルを追加した、彼らは失敗しても、それらを追加します。

イメージの相対パスを使用します。これはおそらく問題です。プロジェクトルートからjarを実行していますか?そうでない場合は、絶対パスを入れることができますが、リソースを使用する方が信頼性が高く、別のコンピュータでjarファイルを実行できます。

+0

IDE内で完全にコンパイルされ、いずれかを示すIDE内にNull要素がありません。このエラーメッセージは、.jarに変換され、Commandで実行中に発生します。 – ArcherGilly

+0

Jarから実行しているデバッガを接続し、コードをステップ実行してください – jrtapsell

+0

説明エラー – jrtapsell

0

@cedrikkが述べたように、問題はMain.createContentのコードに関連しています。

問題は、jarファイルを実行可能ファイルとして実行しようとしたときです - IDE内で実行しようとしましたか?そうでない場合は、問題を見つけるのに役立つようにデバッグしてください。メインクラスを右クリックし、デバッグを選択してください。

javawで実行することに関して、javawはコンソールなしでJavaプログラムを実行するため、エラーメッセージが表示されないのは、いくつかのロギングソリューションを使用しない限り通常はエラーメッセージが表示されるためです。

+0

これはエラーなしでIDEで完全に動作します。あなたは私がデバッグを使用したとは思わなかったのですか?それはIDEの外部でのみ発生します。 – ArcherGilly

関連する問題