首页 > 解决方案 > Java 代码在 Windows 中有效,但在 Linux(Fedora 或 Ubuntu)中无效

问题描述

所以我有这个小型 Java 项目用于学习目的,我正在学习如何从其他 java 文件中调用函数并通过 import 引用它们。一切都在 Windows 中正常工作,我对此很满意,但我只是尝试使用 Fedora 和 Ubuntu 在同一个项目中工作,并且似乎导入和包引用不起作用。

我得到这个试图编译主java文件:

$ javac Ejercicio01.java 
Ejercicio01.java:3: error: package actividad05.introduceDatos does not exist
import static actividad05.introduceDatos.Pregunta.*;
                                        ^
Ejercicio01.java:4: error: package actividad05.operaciones does not exist
import static actividad05.operaciones.Valores.*;
                                     ^
Ejercicio01.java:5: error: package actividad05.operaciones.algebraicas does not exist
import static actividad05.operaciones.algebraicas.Operaciones.*;
                                                 ^
Ejercicio01.java:6: error: package actividad05.operaciones.geometricas does not exist
import static actividad05.operaciones.geometricas.Operaciones.*;
                                                 ^
Ejercicio01.java:13: error: cannot find symbol
            opcion = pideEntero("\nElija una opcion:"
                     ^
  symbol:   method pideEntero(String)
  location: class Ejercicio01
Ejercicio01.java:25: error: cannot find symbol
                        muestraPi();
                        ^
  symbol:   method muestraPi()
  location: class Ejercicio01
Ejercicio01.java:28: error: cannot find symbol
                        muestraValorAleatorio();
                        ^
  symbol:   method muestraValorAleatorio()
  location: class Ejercicio01
Ejercicio01.java:31: error: cannot find symbol
                        double num = pideDouble("Introduzca un valor: ");
                                     ^
  symbol:   method pideDouble(String)
  location: class Ejercicio01
Ejercicio01.java:32: error: cannot find symbol
                        muestraSeno(num);
                        ^
  symbol:   method muestraSeno(double)
  location: class Ejercicio01
Ejercicio01.java:35: error: cannot find symbol
                        num = pideDouble("Introduzca un valor: ");
                              ^
  symbol:   method pideDouble(String)
  location: class Ejercicio01
Ejercicio01.java:36: error: cannot find symbol
                        muestraCoseno(num);
                        ^
  symbol:   method muestraCoseno(double)
  location: class Ejercicio01
Ejercicio01.java:39: error: cannot find symbol
                        muestraRaizCuadrada();
                        ^
  symbol:   method muestraRaizCuadrada()
  location: class Ejercicio01
Ejercicio01.java:42: error: cannot find symbol
                        double base = pideDouble("Introduzca base: ");
                                      ^
  symbol:   method pideDouble(String)
  location: class Ejercicio01
Ejercicio01.java:43: error: cannot find symbol
                        double exp = pideDouble("Introduzca exponente: ");
                                     ^
  symbol:   method pideDouble(String)
  location: class Ejercicio01
Ejercicio01.java:44: error: cannot find symbol
                        calculaPotencia(base, exp);
                        ^
  symbol:   method calculaPotencia(double,double)
  location: class Ejercicio01
15 errors

我的主要 Java 文件引用了其他函数,如下所示:

package actividad05.main;

import static actividad05.introduceDatos.Pregunta.*;
import static actividad05.operaciones.Valores.*;
import static actividad05.operaciones.algebraicas.Operaciones.*;
import static actividad05.operaciones.geometricas.Operaciones.*;

public class Ejercicio01 {

意思是 Ejercicio01.java 在文件夹 src/actividad05/main 中,导入的函数在 src/actividad05/introduceDatos/Pregunta.java 等。

标签: javaubuntuimportpackagefedora

解决方案


我的第一个想法是,这可能是一个类路径问题。检查您的源代码在哪里(.java 文件)以及将它们编译到哪里(.class 文件)。然后检查您是如何尝试运行应用程序的,是类路径上所有 .class 文件的位置吗?在这种情况下,它与操作系统差异无关,而是与编译和执行命令以及文件位置有关。

在另一个操作系统上运行编译代码时有时会出现的问题是 JDK 或 JRE 具有不同的供应商或版本。您使用的是 Oracle 还是 OpenJDK?哪个版本?如果版本不同,甚至编译也可能会遇到麻烦,因为某些 Java 特性不同。

但上述输出指向第一个问题的方向。

编辑:找不到包的问题可能意味着您在与包名称匹配的目录下没有 .java 文件,或者您没有在根包(源目录)上调用编译器。

查看:https ://www.webucator.com/how-to/how-compile-packages-java.cfm


推荐阅读