javac不会编译enum,(Windows Sun 1.6-->;OpenJDK 1.6)

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

修改示例以尝试直接解决问题。我无法更改此代码的状态。Eclipse建议像我在前面的示例中那样导入
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); } }