2012-08-27 1 views
-4

Я создаю два пакета с использованием OSGI. Один из них заключается в нахождении определителя заданной матрицы, а другой - для взятия матрицы от пользователя. Я запускаю эти пакеты, используя фреймворк knopflerfish. Когда я принимаю постоянное значение для матрицы и запускаю эти пакеты, они работают правильно. Но когда я пишу код для ввода пользователя и запускаю его в jar-файле в knopflerfish, он дает ошибку в методе nextInt(). Пожалуйста, дайте мне решение этой проблемы.Как мы можем вводить ввод с клавиатуры в комплект OSGI. Я хочу взять матричные элементы от пользователя

Это код для класса Activator, который я использую для создания пакета. Я создаю файл jar этого пакета и запускаю его в knopflerfish. Он показывает ошибку в методе nextInt(). Я не могу получить пользовательский ввод. Если я бегу эту программу самостоятельно в качестве приложения Java он работает, но в рамках Knopflerfish он не работает

package matrixuse; 
    import java.util.Scanner; 
    import org.osgi.framework.BundleActivator; 
    import org.osgi.framework.BundleContext; 
    import org.osgi.framework.Constants; 
    import org.osgi.framework.ServiceReference; 
    import matrixCal.*; 
    public class Activator implements BundleActivator { 
    public static BundleContext bc = null; 
    public void start(BundleContext bc) throws Exception { 
    System.out.println(bc.getBundle().getHeaders().get(
    Constants.BUNDLE_NAME)+ " starting..."); 
    Activator.bc = bc; 
    ServiceReference reference = bc.getServiceReference 
    (MatrixCal.class.getName()); 
    MatrixCal service = (MatrixCal)bc.getService(reference); 
    int rows, cols; 
    MatrixInput m1=new MatrixInput(); 
    Scanner input = new Scanner(System.in); 
    System.out.print("Enter number of rows: "); 
    rows = input.nextInt(); 
    System.out.print("Enter number of columns: "); 
    cols = input.nextInt(); 
    int array[][] = new int[rows][cols]; 
    System.out.println("Enter elements for Matrix"); 
    for (int i = 0; i < rows; i++) { 
    for (int j = 0; j < cols; j++) { 
    array[i][j] = input.nextInt(); 
     } 
     } 

    int result = service.determinant(array,array.length); 
    System.out.println("Calculated Determinant is :"+ result); 
    bc.ungetService(reference); 
    } 
    public void stop(BundleContext bc) throws Exception { 
    Activator.bc = null; 
    } 
    } 

Исключение составляет

java.util.NoSuchElementException 
    at java.util.Scanner.throwFor(Unknown Source) 
    at java.util.Scanner.next(Unknown Source) 
    at java.util.Scanner.nextInt(Unknown Source) 
    at java.util.Scanner.nextInt(Unknown Source) 
    at matrixuse.Activator.start(Activator.java:24) 
    at org.knopflerfish.framework.BundleImpl.start0(BundleImpl.java:356) 
    at org.knopflerfish.framework.BundleThread.run(BundleThread.java:107) 
+0

Вы пытались перезагрузить? Это обычно работает для меня. –

ответ

0

В качестве альтернативы использованию System.in в вашем активатором, я бы рекомендовал вы используете Felix GoGo Shell (это комплект, который вы можете развернуть в Knopflerfish). Он обеспечивает простой extender-model to add new commands, включая завершение команды.