Как добавить таймер в JLabel при нажатии кнопки? [Дубликат]

Функция, описанная ниже , доступна на NPM : var b64toBlob = require('b64-to-blob')

Функция atob будет декодировать строку с кодировкой base64 в новая строка с символом для каждого байта двоичных данных.

var byteCharacters = atob(b64Data);

Кодовая точка каждого символа (charCode) будет значением байта. Мы можем создать массив байтовых значений, применяя это, используя метод .charCodeAt для каждого символа в строке.

var byteNumbers = new Array(byteCharacters.length);
for (var i = 0; i < byteCharacters.length; i++) {
    byteNumbers[i] = byteCharacters.charCodeAt(i);
}

Вы можете преобразовать этот массив байтовых значений в реальный типизированный массив байтов, пройдя это к конструктору Uint8Array.

var byteArray = new Uint8Array(byteNumbers);

Это, в свою очередь, можно преобразовать в Blob, обернув его в массив, передающий его конструктору Blob.

var blob = new Blob([byteArray], {type: contentType});

Выполняется код выше. Однако производительность может быть немного улучшена за счет обработки byteCharacters меньшими фрагментами, а не сразу. В моем грубом тестировании 512 байт кажется хорошим размером среза. Это дает нам следующую функцию.

function b64toBlob(b64Data, contentType, sliceSize) {
  contentType = contentType || '';
  sliceSize = sliceSize || 512;

  var byteCharacters = atob(b64Data);
  var byteArrays = [];

  for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {
    var slice = byteCharacters.slice(offset, offset + sliceSize);

    var byteNumbers = new Array(slice.length);
    for (var i = 0; i < slice.length; i++) {
      byteNumbers[i] = slice.charCodeAt(i);
    }

    var byteArray = new Uint8Array(byteNumbers);

    byteArrays.push(byteArray);
  }

  var blob = new Blob(byteArrays, {type: contentType});
  return blob;
}
var blob = b64toBlob(b64Data, contentType);
var blobUrl = URL.createObjectURL(blob);

window.location = blobUrl;

Полный пример:

function b64toBlob(b64Data, contentType, sliceSize) {
  contentType = contentType || '';
  sliceSize = sliceSize || 512;

  var byteCharacters = atob(b64Data);
  var byteArrays = [];

  for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {
    var slice = byteCharacters.slice(offset, offset + sliceSize);

    var byteNumbers = new Array(slice.length);
    for (var i = 0; i < slice.length; i++) {
      byteNumbers[i] = slice.charCodeAt(i);
    }

    var byteArray = new Uint8Array(byteNumbers);

    byteArrays.push(byteArray);
  }
    
  var blob = new Blob(byteArrays, {type: contentType});
  return blob;
}


var contentType = 'image/png';
var b64Data = 'iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==';

var blob = b64toBlob(b64Data, contentType);
var blobUrl = URL.createObjectURL(blob);

var img = document.createElement('img');
img.src = blobUrl;
document.body.appendChild(img);

... или ES6:

'use strict';

const b64toBlob = (b64Data, contentType='', sliceSize=512) => {
  const byteCharacters = atob(b64Data);
  const byteArrays = [];
  
  for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {
    const slice = byteCharacters.slice(offset, offset + sliceSize);
    
    const byteNumbers = new Array(slice.length);
    for (let i = 0; i < slice.length; i++) {
      byteNumbers[i] = slice.charCodeAt(i);
    }
    
    const byteArray = new Uint8Array(byteNumbers);
    
    byteArrays.push(byteArray);
  }
  
  const blob = new Blob(byteArrays, {type: contentType});
  return blob;
}


const contentType = 'image/png';
const b64Data = 'iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==';

const blob = b64toBlob(b64Data, contentType);
const blobUrl = URL.createObjectURL(blob);

const img = document.createElement('img');
img.src = blobUrl;
document.body.appendChild(img);
1
задан mKorbel 9 June 2013 в 09:31
поделиться

3 ответа

взгляните на свой импорт. Eclipse импортирован автоматически java.util.Timer. Измените это на javax.swing.Timer, и вы должны быть на вашем пути.

5
ответ дан akf 19 August 2018 в 14:42
поделиться

Импорт javax.swing.Timer не java.util.Timer.

Swing Timer имеет конструктор Timer (int, java.awt.event.ActionListener) .

4
ответ дан NINCOMPOOP 19 August 2018 в 14:42
поделиться

ваш импорт неправильный, там исправлено, что

изменить

java.util.Timer

на

javax.swing.Timer
3
ответ дан PSR 19 August 2018 в 14:42
поделиться
  • 1
    @pinkpanther спасибо, я обновил его – PSR 9 June 2013 в 09:37
  • 2
    @pinkpanther Мне очень жаль, что я обновил его и спасибо – PSR 9 June 2013 в 09:41
Другие вопросы по тегам:

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