【问题标题】:Importing Custom Classes in Java, working with Command Line在 Java 中导入自定义类,使用命令行
【发布时间】:2020-02-14 21:41:36
【问题描述】:

我在同一个文件夹中写了几个类,这是层次结构:

bookpirate/

-Window.java

-Navigator.java

-NavEventHandler.java

所有文件的开头都有"package bookpirate;"

这是我导入它们的方式:

导航器类:

package bookpirate;

import javax.swing.*;
import java.awt.*;
import bookpirate.NavEventHandler;

public class Navigator
{
    private JPanel panel;

    public JTextField page;

    public JButton pageBack;
    public JButton addBefore;
    public JButton addAfter;
    public JButton pageForward;
    public JButton removePage;
    public JButton undo;

    public JTextField getPage() { return page; }

    public JButton getPageBack() { return pageBack; }
    public JButton getAddBefore() { return addBefore; }
    public JButton getAddAfter() { return addAfter; }
    public JButton getPageForward() { return pageForward; }
    public JButton getRemovePage() { return removePage; }
    public JButton getUndo() { return undo; }

    public int nOfPages;
    public int getNOfPages() { return nOfPages; }

    public static void main(String[] args)
    {
        new Navigator();
    }

    public Navigator()
    {
        setListeners();
        System.out.println("Created NavEventHandler");
    }

    private void setListeners()
    {
        NavEventHandler handler = new NavEventHandler(this);

        page.addActionListener(handler);

        pageBack.addActionListener(handler);
        addBefore.addActionListener(handler);
        addAfter.addActionListener(handler);
        pageForward.addActionListener(handler);
        removePage.addActionListener(handler);
        undo.addActionListener(handler);

    }
}

NavEventHandler 类:

package bookpirate;

import java.awt.event.*;
import javax.swing.*;
import bookpirate.Navigator;

public class NavEventHandler implements ActionListener
{
    Navigator navigator;
    public NavEventHandler(Navigator nav)
    {
        navigator = nav;
        System.out.println("Created NavEventHandler");
    }

    public void actionPerformed(ActionEvent event)
    {
        String string = "actionPerformed";
        //if(event.getSource() instanceof Navigator)
        //{
            if(event.getSource() == navigator.getPageBack()) 
            { string = "pageBack";}
            /*else if(event.getSource() == Navigator.getAddBefore()) 
            { string = "addBefore";}
            else if(event.getSource() == Navigator.getAddAfter())
            { string = "addAfter";}
            else if(event.getSource() == Navigator.getPageForward()) 
            { string = "pageForward";}
            else if(event.getSource() == Navigator.getRemovePage()) 
            { string = "removePage";}
            else if(event.getSource() == Navigator.getUndo()) 
            { string = "undo";}
            else if(event.getSource() == Navigator.getPage()) 
            { string = "page " + event.getActionCommand();}*/
            string += " gotSource";
        //}
        System.out.println(string);
    }

    public static void main(String[] args)
    {

    }
}

这是我编译 NavEnventHandler 时得到的结果:

C:\Users\...\bookpirate>javac NavEventHandler.java
NavEventHandler.java:5: error: cannot find symbol
import bookpirate.Navigator;
                 ^
  symbol:   class Navigator
  location: package bookpirate
NavEventHandler.java:9: error: cannot find symbol
        Navigator navigator;
        ^

虽然我可以编译它们一起没有错误

C:\Users\Falangrater\Desktop\Files\Programming\bookpirate>javac NavEventHandler.java Navigator.java Window.java

C:\Users\Falangrater\Desktop\Files\Programming\bookpirate>

但我不能同时或单独运行它们

C:\Users\Falangrater\Desktop\Files\Programming\bookpirate>java Window Navigator NavEventHandler
Error: Could not find or load main class Window

C:\Users\Falangrater\Desktop\Files\Programming\bookpirate>

我已尝试制作 manifest.txt 文件

Main-Class: Window


我无法将 .mf 添加到文件中

我尽量简洁

【问题讨论】:

  • @maszter 如何在不导入的情况下使用它们?我收到错误:找不到符号,正如您在 NavEventHandler 代码块中看到的那样

标签: java class import terminal compilation


【解决方案1】:

您不必从同一个包中导入类。 Why don't I have to import a class I just made to use it in my main class? (Java)

您的任何类中都没有 main 方法,因此您不能以这种方式运行它。 更多:Can we execute a java program without a main() method?

编辑: 你只需要移动到父目录并像这样调用它:

java bookpirate.Navigatorjava bookpirate/Navigator

【讨论】:

  • 它们都有 void main 方法,为了简洁起见,我没有包括它们(它们现在已经完整编辑了)。我不必导入它们,这一切都很好,但是为什么我会收到错误“找不到符号”?
  • 你把同一个类粘贴了两次
【解决方案2】:

这就是问题所在:

我把类放在 bookpirate 包中。因此,我需要在 bookpirate 的父文件夹中才能运行该程序:

/Programming> java bookpirate/Window

/Programming> java bookpirate.Window

代替:

/bookpirate> java Window

【讨论】:

    猜你喜欢
    • 2011-12-13
    • 2015-05-10
    • 2018-07-18
    • 2012-11-19
    • 1970-01-01
    • 2020-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多