Запуск классов Java через перетаскивание окон

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

if(getIntent().hasExtra("CMAKE")){
  String cmake=getIntent().getStringExtra("CMAKE");
}
5
задан PhiLho 20 December 2008 в 11:09
поделиться

4 ответа

Добавление на Adiel A. Если Вы создаете пакетный файл, который запускает Ваш окно Java с помощью Swing. Вы сделали бы, чтобы пользователь отбросил файлы на то окно. Вы могли затем смочь базироваться через те перемещаемые файлы.

0
ответ дан 14 December 2019 в 01:19
поделиться

Для построения на ответе daub815, в Windows, можно использовать пакетный файл для передачи аргументов другой команде. В этом случае мы будем использовать java средство запуска для запуска класса с main метод.

Я сделал быстрый поиск Google о том, как сделать, пишут пакетный файл для взятия нескольких аргументов и нашел, что страница с пакетным файлом передала аргументы другой команде. При адаптации от примера вот то, что можно сделать:

@ECHO OFF
:Loop
IF "%1" == "" GOTO Done
java YourClass %1
SHIFT
GOTO Loop
:Done

Сохраните вышеупомянутый файл как пакетный файл (с ".bat" расширением), и затем можно перетащить файлы на него, и он будет передан как аргументы.

Кроме того, можно назвать пакетный файл из командной строки и передать аргументы также.

Править: Кажется, что пакетный файл не будет работать с заключенными в кавычки аргументами, которые содержат пробелы. Используя обходное решение, представленное в сайте, я связался с, разделит пробелы, содержавшиеся в заключенном в кавычки полном пути файла в отдельные аргументы, так, чтобы не работал также. Если у кого-либо есть хорошая идея, как зафиксировать это, нравиться или редактирует эту запись или отправляет другой ответ. Я сделаю это общественной Wiki.

4
ответ дан 14 December 2019 в 01:19
поделиться

Хорошо, я заставил его работать... Основное знание состоит в том, чтобы использовать DropHandler UUID в реестре. Я установил основную настройку, следующим образом:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.class]
@="JavaClass"

[HKEY_CLASSES_ROOT\JavaClass\DefaultIcon]
@="C:\\Java\\jdk1.6.0_05\\bin\\java.exe,1"

[HKEY_CLASSES_ROOT\JavaClass\shell\open]
@="Run Java class"

[HKEY_CLASSES_ROOT\JavaClass\shell\open\command]
@="\"C:\\Java\\jdk1.6.0_05\\bin\\java.exe\" \"%1\" %*"

[HKEY_CLASSES_ROOT\JavaClass\shellex\DropHandler]
@="{86C86720-42A0-1069-A2E8-08002B30309D}"

и... это не работало!
Я просто забыл, что java.exe хочет имя класса, не имя файла! Но я не вижу способа сделать это в реестре.

К счастью, существует обходное решение, которым все еще нужен файл сценария, если мы хотим быть универсальными, работать над какими-либо/всеми файлами класса (со статической основной функцией, конечно!). Не пакет, я избегаю их, когда я могу. Я принял решение использовать WSH, поскольку это должно быть доступно в любой современной системе Windows. Я также принял решение сделать сценарий JS, это, возможно, был сценарий VB также.

Таким образом, я сделал следующий сценарий (LaunchJavaClass.js):

if (WScript.Arguments.count() == 0)
{
  WScript.StdOut.Write("No parameters");
  WScript.Quit(1);
}
var className = WScript.Arguments.Item(0);
//~ WScript.StdOut.Write(className + "\n");
var m = className.match(/^(.*)\\(.+?)\.class$/);
if (m == null)
{
  WScript.StdOut.Write("Not a class file");
  WScript.Quit(1);
}
var classPath = m[1];
className = m[2];
//~ WScript.StdOut.Write(classPath + " >>> " + className + "\n");
var params = new Array();
for (i = 1; i < WScript.Arguments.count(); i++)
{
  params[params.length] = WScript.Arguments.Item(i);
}
var cmd = "cmd /c cd /D " + classPath + 
    " & C:/Java/jdk1.6.0_05/bin/java.exe " + 
    className + " " + params.join(" ");
//~ WScript.StdOut.Write(cmd + "\n");
var shell = WScript.CreateObject("WScript.Shell");
//~ var exec = shell.Exec(cmd); // Can be used to get stdout
shell.Run(cmd, 0);

Я оставил некоторый вывод, не полезный в этом контексте, но применимый для отладки (выполненным с cscript).
Конечно, путь к JRE должен быть скорректирован.

И я изменился command в реестре, следующим образом:

[HKEY_CLASSES_ROOT\JavaClass\shell\open\command]
@="\wscript -b "D:\\_PhiLhoSoft\\WSH\\LaunchJavaClass.js\" %1 %*"

Конечно, скорректируйте путь и сохраните выше других строк.

Теперь, если я drag'n'drop некоторые файлы в .class файл, это получает короткие пути к файлам как аргументы основного () функция.

import java.io.*;

class TestDnD
{
 public static void main(String[] args)
 {
  Writer output = null;
  try
  {
   output = new BufferedWriter(new FileWriter(new File("LogFile.txt")));
   for (String arg : args)
   {
    output.write(arg + "\n");
   }
  }
  catch (IOException ioe)
  {
   ioe.printStackTrace();
   return;
  }
  finally
  {
    try { output.close(); } catch (IOException e) {}
  }
 }
}

Я думаю, что первая версия .reg файла может использоваться для чего-то еще, например, к drag'n'drop на .jar файлах (адаптирующий его, конечно).

Эта техника ограничила использование: мы редко делаем программы одного класса в Java! Но это было похоже на хорошую и интересную задачу, таким образом, я не сопротивлялся для решения его.Примечание: можно добавить материал как -Djava.ext.dirs="some path;another path" если когда-нибудь необходимо пользоваться внешними библиотеками (в файлах банки).

2
ответ дан 14 December 2019 в 01:19
поделиться

Таким образом, нет никакого способа иметь окна, самого передают args в основной () через перетаскивание?

0
ответ дан 14 December 2019 в 01:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: