Проблемы с подключением сканера к принтеруJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Проблемы с подключением сканера к принтеру

Сообщение Anonymous »

У меня есть следующий код для сканирования изображения в Java 7 с использованием библиотеки Morena. Мой код выглядит следующим образом:

Код: Выделить всё

import SK.gnome.morena.*;
import java.awt.Image;
import java.awt.Toolkit;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class ScannerMorena {
public static void main(String[] args) {
try {
// Seleccionar la fuente de escaneo (dispositivo de red o USB)
MorenaSource source = Morena.selectSource(null);  // Mostrar cuadro de diálogo con dispositivos

if (source != null) {
System.out.println("Fuente seleccionada: " + source.toString());

// Configurar el modo de color y la resolución
//source.setColorMode();   // Modo de color predeterminado
//source.setResolution(100);  // Resolución a 100 DPI

// Obtener la imagen escaneada
MorenaImage morenaImage = new MorenaImage(source);

// Convertir la imagen escaneada a formato de Image de Java
Image scannedImage = Toolkit.getDefaultToolkit().createImage(morenaImage);

// Mostrar la imagen en una ventana gráfica
showImage(scannedImage, "Imagen escaneada de red");

// Cerrar la fuente
Morena.close();
} else {
System.out.println("No se seleccionó ningún dispositivo.");
}
} catch (Exception e) {
e.printStackTrace();
}
}

// Método para mostrar la imagen en un JFrame
public static void showImage(Image image, String title) {
JFrame frame = new JFrame(title);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

// Convertir Image a ImageIcon y agregarla a un JLabel
JLabel label = new JLabel(new ImageIcon(image));

// Agregar el JLabel al JFrame
frame.getContentPane().add(label);
frame.pack();  // Ajustar tamaño del frame al contenido
frame.setVisible(true);
}
}

С помощью этой программы сканирование принтера работает корректно, и никаких перебоев в процессе нет. Но когда я пытаюсь выполнить сканирование с использованием другой библиотеки под названием mmscomputing, процесс сканирования останавливается при запуске сканирования.
Мой код с библиотекой mmscomputing:

Код: Выделить всё

package MorenaExample;
import uk.co.mmscomputing.device.scanner.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.ArrayList;

import javax.swing.JComponent;

public class ScannerManager implements ScannerListener {
private Scanner scanner;
private boolean isScanning = false;
private String lastError = null;
private BufferedImage lastScannedImage = null;
private String scannerName;

public ScannerManager() {
initializeScanner();
}

private void initializeScanner() {
try {
scanner = Scanner.getDevice();
if (scanner != null) {
scanner.addListener(this);
} else {
lastError = "No se pudo inicializar el escáner.  Verifique que esté conectado y los drivers instalados.";
}
} catch (Exception e) {
lastError = "Error al inicializar el escáner: " + e.getMessage();
}
}

//Devolver dispositivos de escaneres en la pc
public String[] listDevices() {
String[] scannersList = null;
try {
//Deberia poder mostrar los escaneres en una lista de escaneres
scannersList = scanner.getDeviceNames();
}catch (ScannerIOException e) {
// TODO: handle exception
System.out.println("Error a la hora listar dipositivos");
}
return scannersList;
}

public boolean isInitialized() {
return scanner != null;
}

public String getLastError() {
return lastError;
}

public BufferedImage getLastScannedImage() {
return lastScannedImage;
}

public String[] getAvailableScanners() {
try {
return scanner.getDeviceNames();
} catch (ScannerIOException e) {
lastError = "Error al obtener la lista de escáneres: " + e.getMessage();
return new String[0];
}
}

public boolean selectScanner(String scannerName) {
try {
scanner.select(scannerName);
return true;
} catch (ScannerIOException e) {
lastError = "Error al seleccionar el escáner: " + e.getMessage();
return false;
}
}

public String getCurrentScanner() {
try {
return scanner.getSelectedDeviceName();
} catch (ScannerIOException e) {
lastError = "Error al obtener el nombre del escáner actual: " + e.getMessage();
return null;
}
}
public boolean startScan() {
if (isScanning) {
return false;
}

try {
System.out.println("-----> El escaner es:" + scanner.getDevice());
scanner.acquire();
isScanning = true;
return true;
} catch (ScannerIOException e) {
lastError = "Error al iniciar el escaneo: " + e.getMessage();
return false;
}
}

public void cancelScan() {
try {
scanner.setCancel(true);
} catch (ScannerIOException e) {
lastError = "Error al cancelar el escaneo: " + e.getMessage();
}
}

public JComponent getScannerUI() {
try {
return scanner.getScanGUI();
} catch (ScannerIOException e) {
lastError = "Error al obtener la interfaz del escáner: " + e.getMessage();
return null;
}
}

@Override
public void update(ScannerIOMetadata.Type type, ScannerIOMetadata metadata) {
System.out.println("HOLA");
System.out.println("Estado del escáner: " + type + type.toString());

if (type.equals(ScannerIOMetadata.ACQUIRED)) {
lastScannedImage = metadata.getImage();
System.out.println("Imagen adquirida correctamente.");
isScanning = false;
} else if (type.equals(ScannerIOMetadata.FILE)) {
File file = metadata.getFile();
System.out.println("Imagen guardada en: " + file.getAbsolutePath());
} else if (type.equals(ScannerIOMetadata.NEGOTIATE) && metadata.getDevice() != null)  {
try {
metadata.getDevice().setResolution(150.0); // Resolución en DPI
//metadata.getDevice().setRegion(0, 0, 100, 100); // Configura el área de escaneo si es aplicable
} catch (ScannerIOException e) {
e.printStackTrace();
}
} else if (type.equals(ScannerIOMetadata.STATECHANGE)) {
String state = metadata.getStateStr();
System.out.println("Cambio de estado del escáner: "  + state);

if (state.contains("Connection Lost")) {
System.out.println("La conexión con el escáner se ha perdido.");
isScanning = false;
// Aquí puedes intentar reconectar o dar alguna notificación al usuario
}
} else if (type.equals(ScannerIOMetadata.EXCEPTION)) {
lastError = metadata.getException().getMessage();
System.out.println("Error durante el escaneo: " + lastError);
isScanning = false;
}
// Añadir una pausa de 500 ms entre cada cambio de estado
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
System.out.println("La pausa fue interrumpida: " + e.getMessage());
}
}

public void close() {
if (scanner != null) {
scanner.waitToExit();
}
}
}
Мой графический интерфейс:

Код: Выделить всё

package ScannerPruebaGUI;

import java.awt.EventQueue;
import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JList;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import MorenaExample.ScannerManager;
import uk.co.mmscomputing.device.scanner.ScannerIOException;

public class UILibrary extends JFrame {

private JPanel contentPane;
private JList listShowScanners;
private String selectedScanner; // Variable para almacenar el escáner seleccionado
private ScannerManager gestorScanner;

public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
UILibrary frame = new UILibrary();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}

}
});
}

public UILibrary() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);

listShowScanners = new JList();
listShowScanners.setBounds(50, 50, 200, 150);
contentPane.add(listShowScanners);

// Listener para guardar el escáner seleccionado
listShowScanners.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
if (!e.getValueIsAdjusting()) { // Asegurarse de que se haya terminado la selección
selectedScanner = listShowScanners.getSelectedValue(); // Guardar el escáner seleccionado
//System.out.println("Escáner seleccionado: " + selectedScanner);

try {
//Acceder al escaner que se selecciono
gestorScanner.selectScanner(selectedScanner);
boolean escanning = gestorScanner.startScan();
gestorScanner.close();
}catch (Exception f) {
// TODO: handle exception
System.out.println("Error en el proceso de escaneo" + f.getMessage());
}
//getSelectedScanner();
}
}
});

loadScannersList(); // Llenar la lista de escáneres disponibles
}

private void loadScannersList() {
gestorScanner = new ScannerManager();
String[] misEscaneres = gestorScanner.listDevices();

if (misEscaneres != null && misEscaneres.length > 0) {
DefaultListModel  model = new DefaultListModel();
for (String scannerName : misEscaneres) {
model.addElement(scannerName);
}
listShowScanners.setModel(model);
} else {
System.out.println("No se encontraron escáneres.");
}
}

// Método para acceder al nombre del escáner seleccionado desde otra parte de la clase
public void getSelectedScanner() {
//Aca tengo en selectScanner el nombre, por lo que de la clase ScannerManager podria seleccionarlo
boolean seleccion = gestorScanner.selectScanner(selectedScanner);
System.out.println("El escaner seleccionado es: " + selectedScanner + " ,se selecciono con exito: " + seleccion);
}
}

Мне нужна помощь, я уже прочитал всю документацию и протестировал несколько проектов, но у меня ничего не получается.
Я хочу отсканировать изображение из сканера принтера с Java 7, у меня есть несколько сканеров, подключенных к Red или общим ресурсам, и я хочу, чтобы моя программа могла это делать

Подробнее здесь: https://stackoverflow.com/questions/791 ... er-scanner
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Проблемы с подключением сканера к принтеру
    Anonymous » » в форуме JAVA
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Невозможно выполнить сопряжение с использованием штрих-кода после отключения сканера с помощью SDK сканера Zebra для MAU
    Anonymous » » в форуме Android
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Приложение Android, подключающееся к Wi-Fi-принтеру для печати
    Anonymous » » в форуме Android
    0 Ответы
    28 Просмотры
    Последнее сообщение Anonymous
  • Подключитесь к принтеру-сканеру с помощью JAVA.
    Anonymous » » в форуме JAVA
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Как подключить приложение Flutter к струйному принтеру Epson CW4000U?
    Anonymous » » в форуме IOS
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»