【问题标题】:Asterisk-java for AMI not working correctly用于 AMI 的 Asterisk-java 无法正常工作
【发布时间】:2013-06-29 06:29:39
【问题描述】:

我是星号的绝对新手。我正在尝试使用 asterisk-java 通过 AMI 进行事件监听。我目前使用的是版本 11.2.1 星号。当我尝试将代码编译为

javac -cp asterisk-java-0.3.jar HelloEvents.java

成功完成。但是当我尝试执行该文件时,我给出了以下错误。

Exception in thread "main" java.lang.NoClassDefFoundError: HelloEvents
Caused by: java.lang.ClassNotFoundException: HelloEvents
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
    Could not find the main class: HelloEvents. Program will exit.

代码是

import java.io.IOException;

import org.asteriskjava.manager.AuthenticationFailedException;

import org.asteriskjava.manager.ManagerConnection;
import org.asteriskjava.manager.ManagerConnectionFactory;
import org.asteriskjava.manager.ManagerEventListener;
import org.asteriskjava.manager.TimeoutException;
import org.asteriskjava.manager.action.StatusAction;
import org.asteriskjava.manager.event.ManagerEvent;

public class HelloEvents implements ManagerEventListener
{
    private ManagerConnection managerConnection;

    public HelloEvents() throws IOException
    {
        ManagerConnectionFactory factory = new ManagerConnectionFactory(
                "localhost", "manager", "password");

        this.managerConnection = factory.createManagerConnection();
    }

    public void run() throws IOException, AuthenticationFailedException,
            TimeoutException, InterruptedException
    {
        // register for events
        managerConnection.addEventListener(this);

        // connect to Asterisk and log in
        managerConnection.login();

        // request channel state
        managerConnection.sendAction(new StatusAction());

        // wait 10 seconds for events to come in
        Thread.sleep(10000);

        // and finally log off and disconnectaaaa
        managerConnection.logoff();
    }

    public void onManagerEvent(ManagerEvent event)
    {
        // just print received events
        System.out.println(event);
    }

    public static void main(String[] args) throws Exception
    {
        HelloEvents helloEvents;

        helloEvents = new HelloEvents();
        helloEvents.run();
    }
}

【问题讨论】:

  • 请告诉我们您究竟是如何尝试执行文件的,即命令行
  • java -cp asterisk-java.jar HelloEvents
  • 试试 java -cp ".;asterisk-java.jar" HelloEvents
  • 请注意,类路径分隔符取决于操作系统,因此如果您使用 *nix 或 mac,您可能会使用冒号而不是分号
  • 工作正常。谢谢...

标签: java asterisk asteriskami


【解决方案1】:
java -cp ".;asterisk-java.jar" HelloEvents

工作正常。 并且类路径分隔符取决于操作系统。如果您使用的是 linux / mac,请使用 :(冒号)而不是 ; (分号)

【讨论】:

    【解决方案2】:

    我们可以避免每次编译或执行代码时都添加类路径。现在转到jar文件所在的位置。然后运行,

    对于 linux :- export CLASSPATH=$CLASSPATH:asterisk-java-2.0.3.jar:.

    对于 Windows:- set CLASSPATH=$CLASSPATH:asterisk-java-2.0.3.jar:.

    现在通过
    javac HelloEvents.java编译代码

    java HelloEvents执行

    【讨论】:

      猜你喜欢
      • 2016-12-27
      • 1970-01-01
      • 1970-01-01
      • 2017-02-17
      • 2017-03-30
      • 2015-02-20
      • 2021-05-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多