javac不会编译enum,(Windows Sun 1.6-->;OpenJDK 1.6)
修改示例以尝试直接解决问题。我无法更改此代码的状态。Eclipse建议像我在前面的示例中那样导入javac不会编译enum,(Windows Sun 1.6-->;OpenJDK 1.6),java,javac,openjdk,Java,Javac,Openjdk,修改示例以尝试直接解决问题。我无法更改此代码的状态。Eclipse建议像我在前面的示例中那样导入Process.state,但这也不起作用。这允许states s=state.READY但调用p.setCurrentState(s)与p.setCurrentState(state.READY)一样失败 问题还在继续。。。。按照奥列格的建议,我尝试了更多的排列方式: package com.scheduler.process; public class Process { public
Process.state,但这也不起作用。这允许states s=state.READY
但调用p.setCurrentState(s)代码>与p.setCurrentState(state.READY)一样失败代码>
问题还在继续。。。。按照奥列格的建议,我尝试了更多的排列方式:
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);
}
好的。现在很清楚,我是脑叶切除术的候选人
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);
}
我需要在类中有一个方法——但我们仍然缺少一些东西(可能是显而易见的)。当我在编译过程之后通过命令行在机器类上运行javac时,仍然会出现以下错误:
mseil@context:/media/MULTIMEDIA/Scratch/Scratch/src/com/scheduler/machine$javac machine.java
Machine.java:3:package com.scheduler.process不存在
导入com.scheduler.process.process;
^
所以我想现在的问题是,我遗漏了什么愚蠢的东西,阻止我手工编译这个eclipse在幕后为我做的东西
======
此处解决的问题:
默认情况下,Eclipse不使用Sun JDK。我假设您使用的是Eclipse的内置编译器,因为Sun的JDK和OpenJDK几乎相同
Java代码大部分时间在Windows和Linux上编译和运行完全相同(除非您使用一些特定于平台的操作)
我怀疑您没有以相同的方式构建代码,并且在编译机器
时,进程
类还没有编译
我建议您使用标准构建系统,如maven
或ant
,它将在任何地方构建相同的系统。如果在Linux上运行Eclipse或在windows上使用相同的.class
,则失败,因为它们在任何情况下都不需要重新编译
顺便说一句:您不需要导入进程。声明,因为它没有被使用,并且它在同一个包中(如果您这样做了,您就不需要了)默认情况下Eclipse不使用Sun JDK。我假设您使用的是Eclipse的内置编译器,因为Sun的JDK和OpenJDK几乎相同
Java代码大部分时间在Windows和Linux上编译和运行完全相同(除非您使用一些特定于平台的操作)
我怀疑您没有以相同的方式构建代码,并且在编译机器
时,进程
类还没有编译
我建议您使用标准构建系统,如maven
或ant
,它将在任何地方构建相同的系统。如果在Linux上运行Eclipse或在windows上使用相同的.class
,则失败,因为它们在任何情况下都不需要重新编译
顺便说一句:您不需要导入流程。说明,因为它没有使用,并且在同一个包中(如果使用了,您就不需要导入)这对我来说很有效:
下载最新的Eclipse
创建新项目
创建两个包com.scheduler.process
和com.scheduler.machine
在包com.scheduler.Process
中创建类Process
,在com.scheduler.Machine
中创建类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
------回答问题的原始版本------
不能导入不在某些包中的类。你就是不能
如果您的类在同一个包中,或者如果您的所有类都是无包的,则不需要导入任何内容
若流程类位于某个包中,则可以只导入其内部类的状态:import a.b.c.Process.status
所有Windows/Linux迁移问题都与Java和您看到的异常无关<代码>导入过程.state
将在任何操作系统上产生异常,因为您无法导入不属于任何包的类
这对我来说很有效:
下载最新的Eclipse
创建新项目
创建两个包com.scheduler.process
和com.scheduler.machine
在包com.scheduler.Process
中创建类Process
,在com.scheduler.Machine
中创建类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
------回答问题的原始版本------
不能导入不在某些包中的类。你就是不能
如果您的类在同一个包中,或者如果您的所有类都是无包的,则无需导入任何内容。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);
}
}