2010-03-13 34 views
33

¿Qué visualizadores y visualizadores HTML de Java puro están disponibles? Los requisitos son:Visualizador/visualizador HTML de Java puro para usar en un panel desplazable

  • Se debe implementar la interfaz JComponent a ser colocado en panel Scrollable.
  • Debe ser preferiblemente una solución gratuita; el código abierto es un plus.
  • Su disponibilidad como artefacto Maven es un plus.

sé que sólo de unos pocos componentes y proyectos, algunos de los cuales son ahora difunto:

Respuesta

2

También puede acceder al navegador nativo a través de algo como: http://djproject.sourceforge.net/ns/

Para ciertas páginas web, esto es a veces la única manera de ir. Siempre hay compensaciones.

Todavía tengo que encontrar un componente de navegador que rinda bien, es de código abierto y suficientemente flexible al mismo tiempo. Cobra se acerca pero hay páginas que no se mostrarán y es difícil (¿imposible?) Hacer cosas como deshacerse de sus propias barras de desplazamiento, etc.

31

Desde Java 8, puede utilizar JavaFX WebView Component, que también puede ser used in Swing.

Código es tan simple como:

JFXPanel jfxPanel = new JFXPanel(); // Scrollable JCompenent 
Platform.runLater(() -> { // FX components need to be managed by JavaFX 
    WebView webView = new WebView(); 
    webView.getEngine().loadContent("<html> Hello World!"); 
    webView.getEngine().load("http://www.stackoverflow.com/"); 
    jfxPanel.setScene(new Scene(webView)); 
}); 

Está respaldada por el motor WebKit (versión depende de JRE y es razonablemente al día). Pero tenga en cuenta que no es un navegador completo, por lo tanto, no cuente con el soporte de, por ejemplo, audio/video HTML5. De lo contrario, ejecuta HTML + CSS + JS tan bueno como su navegador.

Técnicamente, el motor subyacente es C++, no Java nativo. Pero está incluido en el JRE oficial de Oracle, no requiere biblioteca, tiene configuración cero, es tan multiplataforma como Java FX y se actualiza y mantiene activamente.

¿Tan bueno como Java nativo para la mayoría de los casos de uso, creo?


La siguiente información es obsoleta, ya que ahora tenemos vista Web en Java.

Probamos Cobra/Lobo, CSSBox y Flying Saucer, toda pura de Java. Otros son nativos o comerciales.

Contenido: HTML simple generado sobre la marcha (como cadena), CSS incrustado 2.1, no JS.

Relato breve: Flying Saucer es el más simple de usar y el renderizado es el más correcto, pero es mejor tener un control total sobre el contenido. De lo contrario, busque una solución nativa.

largo de la historia:

CSSBox parece ser más activo, sin embargo, parece que depende de algunas bibliotecas 3 ª parte. Por ejemplo, la demostración depende de nekohtml, que usa Apache xerces, que cambió la forma en que funciona el analizador de sax de Java 1.7 predeterminado y rompió mi programa, pero cuando lo obligo a usar las xerces integradas de Java recibo ClassCastException (InlineBox to BlockBox). No puedo hacer que funcione al final. Además, todavía no se ha encontrado una manera de reemplazar el documento en un BrowserCanvas existente.

Cobra ya no se mantiene, tiene que reparar manualmente un incompatibility issue para que funcione en 1.7. También es necesario tomar Mozilla Rhino (sin usar ningún JS) pero eso es todo. Después de eso, es bastante sencillo, solo hay que pedirle a Logger que oculte los mensajes de pintura. Render es correcto y la velocidad es buena, siempre que el documento sea simple. Cuando empiezas a usar etiquetas menos comunes o diseños más complicados, Cobra se deshace rápidamente.

Flying Saucer tiene el mejor soporte de CSS de los tres a partir de la escritura (Feb 2011). La configuración es muy sencilla (por ejemplo, no es necesario configurar documentos como cobo o domparser como cssbox) tiene poca dependencia, lo que también significa que no hay javascript. Pero Flying Saucer es muy estricto sobre lo que le das de comer. La fuente debe ser un XML bien formado, por ejemplo, el estilo y el guión pueden tener que ser envueltos en CDATA y si usted usa entidades html debe declarar DTD (por lo tanto, no docype html5). Sin embargo, si está integrando contenido que puede controlar, entonces puede ser su mejor opción.

+0

Gracias por compartir tu experiencia. Pocos años pasaron y no hay mejoras/cambios sobresalientes por lo que puedo ver :) –

+0

@dma_k: Cobra finalmente me falló, pero puedo encontrar una alternativa mejor llamada Flying Saucer, actualizada por última vez en febrero de 2011. Originalmente alojado en java.net , parece ser más actualizado y más fácil de usar que Cobra y CSSBox. Entonces quizás haya algunas mejoras después de todo. – Sheepy

+0

CSSBox me funciona en Java 7 por lo que parece que los problemas del analizador XML se han resuelto –

10

Si está utilizando Swing, puede incrustar JavaFX WebView.

1) Debería implementar la interfaz JComponent para colocarla en el panel Desplazable.

Para agregar WebView a Swing, debe agregarlo a JFXPanel, que es un JComponent. Para hacer el WebView llenar el pleno JFXPanel, utilicé un AnchorPane así:

   final AnchorPane anchorPane = new AnchorPane(); 
       WebView webBrowser = new WebView(); 

       //Set Layout Constraint 
       AnchorPane.setTopAnchor(webBrowser, 0.0); 
       AnchorPane.setBottomAnchor(webBrowser, 0.0); 
       AnchorPane.setLeftAnchor(webBrowser, 0.0); 
       AnchorPane.setRightAnchor(webBrowser, 0.0); 

       //Add WebView to AnchorPane 
       anchorPane.getChildren().add(webBrowser); 

       //Create Scene 
       final Scene scene = new Scene(anchorPane); 

       // Obtain the webEngine to navigate 
       final WebEngine webEngine = webBrowser.getEngine(); 
       webEngine.load("http://www.google.com"); 
       _jfxPanel.setScene(scene); 

Siempre que ejecute código JavaFX, asegúrese de ejecutarlo en Platform.runLater().

2) Debería ser preferiblemente una solución gratuita; opensource es un plus.

Bueno, es Oracle Oracle puro.

3) La disponibilidad como artefacto experto es un plus.

Consulte la respuesta StackOverflow Maven project with JavaFX (with jar file in `lib`) para obtener asesoramiento sobre la integración de JavaFX y Maven.

De Java8 en JavaFX estará completamente integrado en Java.

Pros Adicionales: -Compatible con HTML5 y JavaScript (utiliza WebKit) interoperabilidad de plataformas -Soporta -incluso soportes que interactúan con el DOM, ejecutar JavaScript, recibir notificaciones de eventos desde la vista Web.

Contras: -JavaFX debe ser instalado. Pero viene incluido con Java desde v7u6 (agosto de 2012).

Otras experiencias:

I intentado djproject, pero tenía un montón de problemas con la interoperabilidad de plataformas. Funcionó bastante bien en Windows, pero solo con un gran esfuerzo en Linux y no pude hacer que funcionara en Mac. Para cada plataforma, también necesita construir una versión de 32 bits y 64 bits de su jar. Con mucho esfuerzo y un gran archivo jar, posiblemente podría fusionar todo en un solo contenedor. Pero esto estaba lejos de ser conveniente.

En comparación con la solución JavaFX que mencioné anteriormente, DJProject era un dolor mucho mayor.

0

Wow haferblues, nunca pensé que encontraría algo que me gustara de JavaFX. Pero la implementación del navegador es realmente agradable. Para aquellos (como yo) que nunca han utilizado JavaFX antes de que aquí la clase completa (para el fragmento de haferblues):

import com.sun.javafx.application.PlatformImpl; 

import javafx.embed.swing.JFXPanel; 
import javafx.scene.Scene; 
import javafx.scene.layout.AnchorPane; 
import javafx.scene.web.WebEngine; 
import javafx.scene.web.WebView; 

public class SwingBrowser extends JFXPanel { 
    private static final long serialVersionUID = 1L; 

    public SwingBrowser(String url) { 
     PlatformImpl.startup(new Runnable() { 
      @Override 
      public void run() { 
       final AnchorPane anchorPane = new AnchorPane(); 
       WebView webBrowser = new WebView(); 

       // Set Layout Constraint 
       AnchorPane.setTopAnchor(webBrowser, 0.0); 
       AnchorPane.setBottomAnchor(webBrowser, 0.0); 
       AnchorPane.setLeftAnchor(webBrowser, 0.0); 
       AnchorPane.setRightAnchor(webBrowser, 0.0); 

       // Add WebView to AnchorPane 
       anchorPane.getChildren().add(webBrowser); 

       // Create Scene 
       final Scene scene = new Scene(anchorPane); 

       // Obtain the webEngine to navigate 
       final WebEngine webEngine = webBrowser.getEngine(); 
       webEngine.load(url); 

       setScene(scene); 
      } 
     }); 
    } 
} 
+0

Recibo: Excepción en el hilo "Rosca AppKit" java.lang.NullPointerException –

0

El platillo volante estaba haciendo el trabajo bien, pero el ejemplo siguiente texto representado era un desvío enorme para mi desarrollo de aplicaciones móviles Java en Linux:

Sometimes the period at the end changes line without the text beside .

Además, el texto no se puede seleccionar a diferencia de la JTextPanel.

El analizador solo parece aceptar la codificación UTF-8. No pude forzar mi propia codificación al analizar.

+1

La última versión tiene una solución en la clase de plato volador Breaker.java que soluciona esto, prueba con el último proyecto de platillo volante en github –

Cuestiones relacionadas