Передавать аргумент в основном методе, когда класс расширяет другой класс в Java

#java

#java

Вопрос:

Я пытаюсь запустить скрипт для asterisk-java , как показано ниже. Я добавил main метод и вызываю service метод внутри него следующим образом:

 import org.asteriskjava.fastagi.AgiChannel;
import org.asteriskjava.fastagi.AgiException;
import org.asteriskjava.fastagi.AgiRequest;
import org.asteriskjava.fastagi.BaseAgiScript;

public class HelloAgiScript extends BaseAgiScript
{
    public void service(AgiRequest request, AgiChannel channel)
            throws AgiException
    {
        // Answer the channel...
        answer();

        // ...say hello...
        streamFile("welcome");

    // ...and hangup.
        hangup();
    }

    public static void main (String[] args) 
    {
    HelloAgiScript asteriskService = new HelloAgiScript();
    asteriskService.service(request, channel);
    }    
}
  

Когда я пытаюсь скомпилировать его с помощью следующей команды:

javac -cp asterisk-java.jar HelloAgiScript.java

Я получаю эту ошибку:

 HelloAgiScript.java:24: error: cannot find symbol
        asteriskService.service(request, channel);
                                ^
  symbol:   variable request
  location: class HelloAgiScript
HelloAgiScript.java:24: error: channel has private access in AgiOperations
        asteriskService.service(request, channel);
                                         ^
2 errors
  

Как я могу передать аргументы экземпляру service метода внутри main метода?

Комментарии:

1. Это ожидаемо. Оба аргумента, предоставленные в вызове, asteriskService.service(request, channel); не определены внутри main метода.

2. Я никогда раньше не слышал об asterisk Java, поэтому я просто погуглил его и прочитал руководство, связанное с домашней страницей: asterisk-java.org/tutorial . Это объясняет, что скрипт должен выполняться сервером. Вы не пишете метод main. Вы удаляете свой класс внутри сервера, который будет вызывать ваш метод. Прочитайте руководство. Вот для чего это нужно.

Ответ №1:

Вам нужно передать аргумент как объект AgiRequest и AgiChannel класс для service() вызова метода.

Как и в вашем случае, обе request и channel переменные не создаются. Вот почему вы получаете ошибку Can't find symbol

Ваш основной метод должен быть таким:

 public static void main (String[] args) 
{
    HelloAgiScript asteriskService = new HelloAgiScript();
    AgiRequest request = new AgiRequest();
    AgiChannel channel = new AgiChannel();
    asteriskService.service(request, channel);
 }  
  

Комментарии:

1. Я попробовал ваше решение. Я получаю эту ошибку: AgiRequest is abstract. Cannot be instantiated .

2. @Laxman, Как предложил JB Nizet в вашем комментарии к сообщению. Он должен быть запущен на сервере. И вам не нужно иметь для этого метод main. Сервер будет вызывать ваш сервисный метод. Пожалуйста, ознакомьтесь с этим руководством

Ответ №2:

Вы не ввели никаких параметров в свой метод main из командной строки. Вы должны написать что-то вроде

 javac -cp asterisk-java.jar par1, par2
  

Но, прежде всего, вы должны определить, какой параметр должен быть вашим внутренним параметром, например

 public static void main (String[] args) 
{
    HelloAgiScript asteriskService = new HelloAgiScript();
    AgiRequest request = args[0];
    AgiChannel channel = args[1];
    asteriskService.service(request, channel);
 } 
  

Посмотрите здесь

Комментарии:

1. Эй, Дред, как ты можешь ожидать, что строка будет присваиваться объекту в AgiRequest request = args[0];

2. @DKAnsh, привет. Это всего лишь обычный пример. На самом деле, я не знаю, что такое AgiRequest и AgiChannel. Возможно ли, что это его собственные классы и это похоже на строку. В любом случае, вопрос был о том, как я могу передать аргументы экземпляру

3. Они являются модулями из asterisk-java . Я компилирую их, используя jar файл.

4. ОК. Если после первого ответа у вас нет никаких исключений, это нормально, что вы не принимаете мой ответ.