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);
}
}
我需要在课堂上有一个方法 - 但我们仍然缺少一些东西(可能很明显)。当我通过命令行并在编译Process后的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 generics code compiles in eclipse but not in command line
答案 0 :(得分:3)
这对我有用:
com.scheduler.process
和com.scheduler.machine
Process
包中创建类com.scheduler.process
,在Machine
中创建类com.scheduler.machine
,并从帖子中复制它们的内容,修改它们以符合Java语言语法,如下所示:
------回答以前版本的问题------
现在就回答这个问题:你需要
import com.scheduler.process.Process.status
或import com.scheduler.process.Process.*
,并将状态称为status
或
import com.scheduler.process.*
或import com.scheduler.process.Process
,并将状态称为Process.status
------回答问题的原始版本------
您无法导入不在某个包内的类。你不能。 It is a compile time error to import a type from the unnamed package
如果您的课程在同一个套餐中,或者您的所有课程都是无包装的,则无需导入任何内容。
如果Process类在某个包中,则可以只导入其状态内部类:import a.b.c.Process.status
可以正常工作。
所有Windows / Linux迁移问题与您看到的Java和异常无关。 import Process.state;
将在任何操作系统上产生异常,因为您无法导入不属于任何包的类。
答案 1 :(得分:1)
默认情况下,Eclipse不使用Sun JDK。我假设你使用Eclipse的内置编译器作为Sun的JDK和OpenJDK几乎完全相同。
Java代码在大多数情况下在Windows和Linux上编译和运行完全相同(除非您使用一些特定于平台的操作)
我怀疑您没有以相同的方式构建代码,当您编译Machine
时,Process
类尚未编译。
我建议您使用标准的构建系统,如maven
或ant
,它将在任何地方构建相同的内容。如果在Linux上运行Eclipse或者在Windows上运行的.class
运行失败,则无需在任何情况下重新编译它们。
顺便说一句:你不需要导入Process.state
,因为它没有使用它和它在同一个包中(如果你这样做就不需要)