0
package com.scheduler.process;

public class Process {
    public enum state {
        NOT_SUBMITTED, SUBMITTED, BLOCKED, READY, RUNNING, COMPLETED 
    }
        private state currentState;

    public state getCurrentState() {
        return currentState;
    }

    public void setCurrentState(state currentState) {
        this.currentState = currentState;
    }

}



package com.scheduler.machine;
import com.scheduler.process.Process;
import com.scheduler.process.Process.state;

public class Machine {
    com.scheduler.process.Process p = new com.scheduler.process.Process();
    state s = state.READY;  //fails if I don't also explicitly import Process.state
    p.setCurrentState(s);  //says I need a declarator id after 's'... this is wrong.
    p.setCurrentState(state.READY);
}

例を修正して、問題を解決できるようにしました。このコードの状態を変更できません。Eclipse は、前の例で行ったインポートProcess.state likeを提案しますが、これも機能しません。これは可能state s = state.READYですが、への呼び出しはp.setCurrentState(s);失敗しますp.setCurrentState(state.READY);

問題は続きました....オレグの提案に従って、さらに順列を試しました:

package com.scheduler.machine;
import com.scheduler.process.Process;
import com.scheduler.process.Process.*;

public class Machine {
    com.scheduler.process.Process p = new com.scheduler.process.Process();
    public state s = Process.state.READY;  
    p.setCurrentState(s);
    p.setCurrentState(state.READY);
}

わかった。私がロボトミーの候補であることは明らかです。

package com.scheduler.machine;

import com.scheduler.process.Process;
import com.scheduler.process.Process.state;

public class Machine {

    public void doStuff(){
        com.scheduler.process.Process p = new com.scheduler.process.Process();
        state s = state.READY;  //fails if I don't also explicitly import Process.state
        p.setCurrentState(s);  //says I need a declarator id after 's'... this is wrong.
        p.setCurrentState(state.READY);
    }

}

クラスにメソッドが必要でしたが、まだ何か (おそらく明白) が不足しています。プロセスをコンパイルした後、コマンドラインから Machine クラスで javac を実行すると、まだ次のエラーが発生します。

mseil@context:/media/MULTIMEDIA/Scratch/Scratch/src/com/scheduler/machine$ javac Machine.java Machine.java:3: package com.scheduler.process does not exist import com.scheduler.process.Process; ^

だから私は今、日食が舞台裏で私のためにやっているこれを手作業でコンパイルするのを妨げている、私が見逃しているばかげたことは何だと思いますか?

====== ここで解決された問題:
Java ジェネリック コードは Eclipse でコンパイルされますが、コマンド ラインではコンパイルされません

4

2 に答える 2

3

これは私にとってはうまくいきました:

  1. 最新の Eclipse をダウンロード
  2. 新しいプロジェクトを作成
  3. 2 つのパッケージcom.scheduler.processを作成し、com.scheduler.machine
  4. Processパッケージ内com.scheduler.processにクラスとクラスMachine内を作成com.scheduler.machineし、投稿から内容をコピーして、Java 言語の構文に準拠するように変更します。次のようにします。 ここに画像の説明を入力 ここに画像の説明を入力
  5. すべてがすぐにコンパイルされます。

------ 以前のバージョンの質問に答えるには ------

現在の質問に答えるには、ステータスを単にimport com.scheduler.process.Process.statusまたはとして参照する必要があります import com.scheduler.process.Process.*status

また

import com.scheduler.process.*またはimport com.scheduler.process.Processステータスを次のように参照しますProcess.status

------ 質問の元のバージョンに答える ------

  1. 一部のパッケージに含まれていないクラスをインポートすることはできません。あなたはできません。名前のないパッケージから型をインポートすると、コンパイル時エラーが発生します

  2. クラスが同じパッケージ内にある場合、またはすべてのクラスがパッケージレスである場合は、何もインポートする必要はありません。

  3. Process クラスが何らかのパッケージ内にある場合、そのステータスの内部クラスだけをインポートすることが可能です:import a.b.c.Process.status問題なく動作します。

  4. すべての Windows/Linux 移行の問題は、Java と表示される例外とは何の関係もありません。import Process.state;どのパッケージにも属さないクラスをインポートできないため、どの OS でも例外が発生します。

于 2011-11-11T08:59:55.277 に答える
1

Eclipse はデフォルトで Sun JDK を使用しません。Sun の JDK と OpenJDK はほとんど同じであるため、Eclipse の組み込みコンパイラを使用していると思います。

ほとんどの場合、Java コードは Windows と Linux でまったく同じようにコンパイルおよび実行されます (プラットフォーム固有の操作をいくつか使用しない限り)。

コードを同じ方法でビルドしていないと思われます。コンパイルするMachineと、Processクラスはコンパイルされていません。

mavenorのような標準のビルド システムを使用することをお勧めします。そうすればant、どこでも同じようにビルドできます。LinuxでEclipseを実行することに失敗した場合、またはWindowsで使用するのと同じものを実行することに失敗した場合、.class再コンパイルする必要はありません。

Process.stateところで:使用されておらず、同じパッケージに含まれているため、インポートする必要はありません(インポートした場合は必要ありません)

于 2011-11-11T08:20:35.970 に答える