Java.lang.RuntimeException: не удается запустить средство просмотра. API GraphStream-Android

Привет, я новичок в разработке Android и работаю в университете, чтобы создать приложение, которое может создавать графики (теории графов) и выполнять алгоритмы, я решил использовать graphstream, потому что это библиотека графов, но у меня есть некоторые проблемы, я не могу поместить узел в представление макет находится во фрагменте, потому что я использую две активности: одну для рисования графика, а другую для выбора алгоритма. (это просто тест, чтобы увидеть, появится ли график на экране, я попробую реализовать кнопки, чтобы пользователь создавал свой собственный график).

это мой код Java:

package com.projeto.gabriel.athenatgfinal;

import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.BottomNavigationView;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;

import org.graphstream.graph.Graph;
import org.graphstream.graph.implementations.SingleGraph;
import org.graphstream.ui.android_viewer.DefaultView;

public class FragmentGrafo extends Fragment {

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
   final View view = inflater.inflate(R.layout.grafo_fragment, container, false);

   BottomNavigationView bottomNavigationView = view.findViewById(R.id.bottomNavView);
   bottomNavigationView.setOnNavigationItemSelectedListener(selectedListener);

   return view;
}

private BottomNavigationView.OnNavigationItemSelectedListener selectedListener
        = new BottomNavigationView.OnNavigationItemSelectedListener() {
    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.action_add_node:
                Toast.makeText(getActivity(), "Clicou em add nó", Toast.LENGTH_SHORT).show();
                return true;

            case R.id.action_add_aresta:
                Toast.makeText(getActivity(), "aresta aqui", Toast.LENGTH_SHORT).show();
                return true;

            case R.id.action_remover:
                Toast.makeText(getActivity(), "remover", Toast.LENGTH_SHORT).show();
                return true;
        }
        return false;
    }
};

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    System.setProperty("org.graphstream.ui.renderer","org.graphstream.ui.j2dviewer.J2DGraphRenderer");
   Graph graph = new SingleGraph("tutorial 1");

    graph.addNode("A" );
    graph.addNode("B" );
    graph.addNode("C" );
    graph.addEdge("AB", "A", "B");
    graph.addEdge("BC", "B", "C");
    graph.addEdge("CA", "C", "A");

    graph.display();
 }
}

это мой макет:

<RelativeLayout xmlns:android = "http://schemas.android.com/apk/res/android"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
xmlns:app = "http://schemas.android.com/apk/res-auto">

<org.graphstream.ui.android_viewer.util.DefaultFragment
    android:id = "@+id/fragment_tag"
    android:layout_width = "wrap_content"
    android:layout_height = "match_parent"
    android:layout_above = "@+id/bottomNavView"
    android:layout_alignParentStart = "true"
    android:layout_alignParentTop = "true"
    android:layout_alignParentEnd = "true"
    android:layout_marginStart = "0dp"
    android:layout_marginTop = "369dp"
    android:layout_marginEnd = "0dp"
    android:layout_marginBottom = "287dp" />

<include layout = "@layout/bottom_nav_view"
    android:id = "@+id/bottomNavView"/>

</RelativeLayout>

это мой нижний NavView, который я пытаюсь поместить в событие, чтобы щелкнуть и нарисовать узлы и ребра и удалить их:

<?xml version = "1.0" encoding = "utf-8"?>
<android.support.design.widget.BottomNavigationView
    xmlns:android = "http://schemas.android.com/apk/res/android"
    xmlns:app = "http://schemas.android.com/apk/res-auto"
    android:layout_width = "match_parent"
    android:layout_height = "wrap_content"
    android:layout_alignParentBottom = "true"
    android:layout_alignParentStart = "true"
    app:itemBackground = "@color/colorPrimary"
    app:itemIconTint = "@color/nav_item_color"
    app:itemTextColor = "@color/nav_item_color"
    app:menu = "@menu/menu_grafo">

</android.support.design.widget.BottomNavigationView>

и это моя ошибка:

--------- beginning of crash

E/AndroidRuntime: FATAL EXCEPTION: main Process: com.projeto.gabriel.athenatgf, PID: 6000 java.lang.RuntimeException: Cannot launch viewer. at org.graphstream.graph.implementations.AbstractGraph.display(AbstractGraph.java:212) at org.graphstream.graph.implementations.AbstractGraph.display(AbstractGraph.java:204) at com.projeto.gabriel.athenatgfinal.FragmentGrafo.onCreate(FragmentGrafo.java:67) at android.support.v4.app.Fragment.performCreate(Fragment.java:2414) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1418) at android.support.v4.app.FragmentTransition.addToFirstInLastOut(FragmentTransition.java:1195) at android.support.v4.app.FragmentTransition.calculateFragments(FragmentTransition.java:1078) at android.support.v4.app.FragmentTransition.startTransitions(FragmentTransition.java:117) at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2408) at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2366) at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:2243) at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:654) at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:146) at android.support.v4.view.ViewPager.populate(ViewPager.java:1244) at android.support.v4.view.ViewPager.populate(ViewPager.java:1092) at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1622) at android.view.View.measure(View.java:19857) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6083) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464) at android.widget.LinearLayout.measureVertical(LinearLayout.java:758) at android.widget.LinearLayout.onMeasure(LinearLayout.java:640) at android.view.View.measure(View.java:19857) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6083) at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:143) at android.view.View.measure(View.java:19857) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6083) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464) at android.widget.LinearLayout.measureVertical(LinearLayout.java:758) at android.widget.LinearLayout.onMeasure(LinearLayout.java:640) at android.view.View.measure(View.java:19857) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6083) at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) at android.view.View.measure(View.java:19857) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6083) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464) at android.widget.LinearLayout.measureVertical(LinearLayout.java:758) at android.widget.LinearLayout.onMeasure(LinearLayout.java:640) at android.view.View.measure(View.java:19857) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6083) at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) at com.android.internal.policy.DecorView.onMeasure(DecorView.java:690) at android.view.View.measure(View.java:19857) at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2275) at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1366) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1619) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1254) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6338) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:874) at android.view.Choreographer.doCallbacks(Choreographer.java:686) at android.view.Choreographer.doFrame(Choreographer.java:621) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:860) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6169) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:891) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:781) Caused by: org.graphstream.util.MissingDisplayException: No UI package detected! Please use System.setProperty("org.graphstream.ui") for the selected package. at org.graphstream.util.Display.getDefault(Display.java:55) at org.graphstream.graph.implementations.AbstractGraph.display(AbstractGraph.java:209) ... 58 more Application terminated.

Мой вопрос, как это исправить?, это лучший способ сделать это? спасибо за чтение, пожалуйста, помогите мне.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
668
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы не можете использовать Graphstream 1.3 и обычный метод display(). Если вы хотите разработать приложение для Android, вы должны использовать Графстрим 2.0 с параметром Пользовательский интерфейс Android.

Вы можете найти пример здесь, чтобы помочь вам.

Я сделал импорт API, как показано, но org.graphstream.ui.android_viewer.util.DefaultFragment появляется в xml «Следующие классы не могут быть созданы», и когда я выполняю его, появляется java.lang.RuntimeException: не удается запустить зритель. Я попытался создать отображение класса (Bundle saveInstanceState, Graph graph, boolean autoLayout), но это не сработало, не могли бы вы привести пример?

Gabriel Ricardo 15.03.2019 22:34

в ссылке, которую я дал вам, есть много примеров. Посмотрите здесь: github.com/graphstream/gs-ui-android-test/tree/master/app/sr‌​c/…

H.Brahimi 17.03.2019 18:42

Спасибо, я лучше прочитал то, что было по ссылке и по коду смог заставить работать фрагмент и нарисовать график. Спасибо большое.

Gabriel Ricardo 17.03.2019 19:47

Другие вопросы по теме