Запуск приложения Scala Swing в Windows без командного окна

У меня есть приложение Swing, написанное на Scala в файле .jar . Я создал ярлык рабочего стола с помощью команды scala «filepath\filename.jar» , которая работает, за исключением того, что она открывает командное окно, которое сначала находится в фоновом режиме, пока я не закрою приложение. Я хочу, чтобы это исчезло.

Я считаю, что для Java вы должны использовать челюсть вместо java для этой цели. Я попытался скопировать файл scala.bat в новый файл с именем scalaw.bat и изменить 24 строки на

if exist "%JAVA_HOME%\bin\javaw.exe" set "_JAVACMD=%JAVA_HOME%\bin\javaw.exe" 

и 28 строки на

if "%_JAVACMD%"=="" set _JAVACMD=javaw

, но (после обновления ярлыка на рабочем столе) я все еще получаю окно команд. Любые идеи?


Обновление : Я пытался добавить scala-library.jar в манифест, но это не работает, я думаю, потому что пути относительно корня банка. Другой вариант, похоже, включает в себя весь банк scala-library в файле jar (Создание файла jar из файла Scala) , но я не считаю это решением.

Или я могу распаковать банку в ее составные файлы .class и использовать ярлык

javaw.exe -cp «% SCALA _ HOME %/lib/scala-library.jar»; «filepath\\» packageName.className

, но... который включает распаковку банки.

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


Решение : согласно ответу eugener, вы должны использовать челюсть без опции -jar, но указывая jar-файл, например

javaw -cp "%SCALA_HOME%/lib/*";"C:/path/yourjar.jar" packageName.className

Если это приложение Swing и вы используете библиотеку scala-swing , вы также должны включить это или использовать * подстановочный символ

-121--1199896-

Временные изменения владельца фокуса на null Я довольно новичок в разработке Swing, надеюсь, мой вопрос не является глупым. У меня есть следующая проблема. Я отслеживаю фокус с помощью KeyeyFocusManager, слушаю свойство FocusOwner...

Я довольно новичок в разработке Swing, надеюсь, мой вопрос не глупый.

У меня есть следующая проблема. Я отслеживаю центр, используя KeyboardFocusManager, прислушиваясь к собственности изменения permanentFocusOwner. Однако, когда центр изменяется от одного контроля до другого, я получаю промежуточное изменение собственность permanentFocusOwner к пустой указатель .

Моя текущая логика пользовательского интерфейса вносит некоторые изменения в элементы управления, когда фокус находится внутри одной из панелей или ее дочерних панелей. Однако получение промежуточного значения null нарушает эту логику.

Я искал в Google информацию об этой проблеме, не нашел ничего значимого.

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

Вот минимальное приложение, воспроизводящее упомянутое поведение:

import java.awt.*;
import java.beans.*;
import javax.swing.*;

public class FocusNullTest extends JFrame {

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                FocusNullTest self = new FocusNullTest();
                self.setVisible(true);
            }
        });
    }

    public FocusNullTest() {
        setSize(150, 100);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Container contentPane = getContentPane(); 
        contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.X_AXIS));

        contentPane.add(new JButton("1"));
        contentPane.add(new JButton("2"));

        KeyboardFocusManager focusManager =
            KeyboardFocusManager.getCurrentKeyboardFocusManager();
        focusManager.addPropertyChangeListener(
                "permanentFocusOwner",
                new PropertyChangeListener() {
                    @Override
                    public void propertyChange(PropertyChangeEvent e) {
                        System.out.println("permanentFocusOwner changed from: "
                                           + e.getOldValue());
                        System.out.println("permanentFocusOwner changed to  : "
                                           + e.getNewValue());
                    }
                });
    }
}

продукция регистрации:

(начало программы, центр устанавливает в кнопку 1 автоматически)
permanentFocusOwner изменился от: пустой указатель
permanentFocusOwner изменился на: javax.swing. JButton [0,18,41x26, (пропустил)]
(кнопка 2, на которую нажимают)
, permanentFocusOwner изменился от: javax.swing. JButton [0,18,41x26, (пропустил)]
, permanentFocusOwner изменился на: пустой указатель
permanentFocusOwner изменился от: пустой указатель
permanentFocusOwner изменился на: javax.swing. JButton [41,18,41x26, (пропустил)]


(дополнительная часть на кодовом намерении)
Моя цель - сделать что-то похожим на представление списка, где записи расширяются и отображают больше информации, когда они получают фокус (и сворачиваются, когда теряют его). Развернутый вид содержит несколько дополнительных кнопок.

JList не кажется подходящим элементом управления, потому что (1) он не позволяет нажимать на кнопки, и (2) его записи имеют постоянную высоту, тогда как я хочу, чтобы записи динамически расширялись в фокусе. JTable с режимом редактирования не является подходящим решением, по крайней мере, из-за постоянного размера записи.

Поэтому я использую простую JPanel с вертикальной компоновкой коробки в качестве контейнера и подписываюсь на изменения модели и обновляю визуальные эффекты вручную. Проблема в том, что при нажатии кнопки предмет, содержащий список, теряет фокус. Я могу обнаружить, что фокус все еще остается в списке предмета если фокус временно не изменится на null .

5
задан Vlad 10 September 2011 в 14:30
поделиться