0

私は基本的なTCPチャットプログラムを書いていますが、要件の1つは、次の引数形式を使用してコマンドラインから実行できることです。

java Server 8888
java Client localhost 8888

これにより、8888でリッスンしているサーバーが起動し、クライアントからの着信接続の受け入れを待機します。次に、クライアントを起動し、localhost:8888でサーバーに接続します。これらのクラスは、Eclipse内からコンパイルして実行することができ、クラスの実行構成にそれぞれ上記の変数を追加しました。

CMDでファイルのディレクトリに移動すると、コンパイルされた.classファイルが表示されますが、次のコマンドでサーバーを実行しようとすると、

java Server 8888

エラーが発生します

Error: Could not find or load main class Server

Eclipse> Window> Preferences>Java>CompilerはJDK1.7を示しています。

コマンドラインからjava-versionを実行すると、

java version "1.7.0_02"
Java(TM) SE Runtime Environment (build 1.7.0_02-b13)
Java HotSpot(TM) 64-Bit Server VM (build 22.0-b10, mixed mode)

別々のプロンプトから両方のクラスを並行して実行できるようにしたいと思います。何か案は?

4

3 に答える 3

3
java -cp . basicChat.Server 8888

完全修飾クラス名(パッケージ名を含む)を指定する必要があります

理由:

クラスのフルネーム(完全修飾名と呼ばれます)はではなくServer、ですbasicChat.Server。このファイルは、という名前のディレクトリの下にありますbasicChat。そのため、javaはパッケージ名に一致するディレクトリ構造を探しています。Server.classファイルは、ファイルシステムのbasicChatディレクトリの下にあります。

Serverそれ以外の場合は、異なるパッケージ(名前空間)で呼び出された複数のクラスがある場合に、目的のクラスを選択する際にどのように問題が発生するかを検討してください。

于 2012-12-23T20:34:30.770 に答える
1

これらのクラスの両方にmainメソッドがあると確信していますか?

public static void main(String[] args) { ... }

そして、あなたのクラスにはpublic修飾子がありますか?

このクラスがパッケージに含まれている場合、例:次のようなフォルダーtest.Serverから実行します。bin

java test.Server 8888

このクラスのコンパイル:

public class Server {
    public static void main(String[] args) {
        System.out.println(Arrays.deepToString(args));
    }
}

と実行中:

java Server 8888

出力を与えます:

[8888]
于 2012-12-23T20:33:52.870 に答える
0

CLASSPATHが正しくありません。binディレクトリから(Windowsの場合)次のことを試してください。

java -cp .;%CLASSPATH% basicChat.Server 8888

また、Eclipseでサーバーを実行できます。その実行構成を作成し、引数でポートを指定します。次に、Eclipseで起動できます。停止するか、Eclipseを閉じるとutilが実行されます。

于 2012-12-23T20:30:20.737 に答える