-1

自分でパッケージを書くことを学びたいので、IDEにも頼りません。問題は、自分のパッケージを実行する方法や、自分のパッケージを実行するための適切な方法がわからないことです。

これが私がいくつかの基本を学ぶために使用したリソースです:http://javaworkshop.sourceforge.net/chapter3.html

これが私の現在のファイル構造です:

Main.java
/src
 projectaqua/
  GameFrame.java
/classes
 projectaqua/
  GameFrame.class

プロジェクトのルートディレクトリでコマンドを実行しました。javac -d ./classes/ ./src/projectaqua/*.java

私はもともと/src/ projectaquaディレクトリにメインファイルを作成し、そのファイルを実行しようとしました。私はこのエラーを与えられました:

Main.java:1: error: package projectaqua does not exist                               
import projectaqua.GameFrame; 

Mainファイルをパッケージと一緒にコンパイルするときに/classes/ projectaquaディレクトリでアプリケーションを実行しようとしましたが、クラスが定義されていないというエラーが発生しました。

これでパッケージがコンパイルされました。私が直面している問題は、独自のパッケージをインポートして実行する方法と、パッケージを実行するファイルがどこにあるのかがわからないことです。

私が学校で学んだことから、GUIアプリケーションを作成するとき、フレームをインスタンス化するためのメイン関数を持つクラスを作成します。それが唯一の仕事です。これはこの構造のどこにありますか?

直感的には、ファイルはsrcファイルの外にあるように見えますが、それではsrcファイルの目的が失われているように感じます。このトピックへのstackoverflowで役立つものは何も見つかりませんでした。もしそうなら、またはその方向に私を向けてください。

その他のソースコード:

GameFrameクラス:

package projectaqua;

import javax.swing.JFrame;

public class GameFrame extends JFrame
{

    private int WINDOW_HEIGHT = 500;
    private int WINDOW_WIDTH = 500;
    private String title = "Project Aqua";
    private boolean isVisible = true;

    public GameFrame()
    {

        // Basic Window Defaults
        setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
        setTitle(this.title);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // Content Pane junk
        // Will be added

        setVisible(this.isVisible);

    }

}

メインクラス

import projectaqua.GameFrame;

public class Main
{

    public static void main(String[] args)
    {
        GameFrame launch = new GameFrame();
    }

}
4

2 に答える 2

2

私は今あなたの問題を見ます。

あなたの質問では、実行とコンパイルに問題があることを明確にしていませんでした。このエラー トレースを投稿した場合、問題が何であるかはすぐにわかります。

 unrollme-dev-dan:projectaqua Dan$ java Main
 Exception in thread "main" java.lang.NoClassDefFoundError: Main (wrong name: projectaqua/Main)

NoClassDefFoundErrorまた、Google で調べていれば、これが見つかったことにも注意してください。ここでの教訓は、正確なエラーを理解し、調査することです。

ともかく

unrollme-dev-dan:classes java projectaqua/Main

あなたが望むものです。ディレクトリの変更に注意してください。パッケージ階層とファイル構造階層の関係に関係する理由を理解しようとはしませんでした。

設計時に Java には 2 つの選択肢がありました。あなたが話していることがグローバル パッケージにあると仮定するか (うーん!)、それがどのパッケージに含まれているかを推測してみてください。作業ディレクトリの下の任意のフォルダーをパッケージとして扱います。したがって、実行中のディレクトリにクラスが見つかったとしても、ディレクトリに対応する名前空間、つまりグローバルなものにクラスがMain見つかりませんでした。Main.

あるディレクトリから実行し、その中の何かを実行するように指示すると、 でprojectaqua/始まるクラスが検索されprojectaquaます。

または、実行する場合

unrollme-dev-dan:projectaqua java projectaqua.Main

正しいものを探します。

于 2013-03-06T02:23:37.507 に答える
0

プロジェクトのルートでこのコマンドを試してください

javac -cp ./classes -d ./classes ./src/projectaqua/*.java

また、 Main.java と GameFrame.java の両方がpackage projectaqua;最初にあることを確認してください

于 2013-03-06T02:12:46.557 に答える